58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import logging
|
|
|
|
from odoo import api, fields, models
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class StockPicking(models.Model):
|
|
_inherit = 'stock.picking'
|
|
|
|
starshipit_parcel_reference = fields.Char("Starshipit Parcel Reference", copy=False)
|
|
starshipit_return_parcel_reference = fields.Char("Starshipit Return Parcel Reference", copy=False)
|
|
|
|
@api.model
|
|
def _cron_starshipit_fetch_and_update_prices(self, auto_commit=True):
|
|
"""
|
|
Cron job to trigger price updates for pickings with pending Starshipit prices.
|
|
"""
|
|
pickings_by_carrier = self.env['stock.picking']._read_group(
|
|
domain=[
|
|
('carrier_price', '=', 0.0),
|
|
('starshipit_parcel_reference', '!=', False),
|
|
('delivery_type', '=', 'starshipit'),
|
|
('state', 'not in', ('cancel', 'draft'))
|
|
],
|
|
groupby=['carrier_id'],
|
|
aggregates=['id:recordset']
|
|
)
|
|
total_pickings = sum(len(pickings_for_carrier) for _, pickings_for_carrier in pickings_by_carrier)
|
|
_logger.info("Starshipit Cron: Found %s picking(s) with pending price(s).", total_pickings)
|
|
|
|
for carrier, pickings_for_carrier in pickings_by_carrier:
|
|
try:
|
|
carrier.get_starshipit_price_update(pickings_for_carrier)
|
|
if auto_commit:
|
|
self.env.cr.commit()
|
|
except Exception:
|
|
_logger.exception("Starshipit Cron: Error processing pickings for carrier %s", carrier.name)
|
|
if auto_commit:
|
|
self.env.cr.rollback()
|
|
|
|
_logger.info("Starshipit Cron: Finished processing pending prices.")
|
|
return True
|
|
|
|
def action_print_starshipit_labels(self):
|
|
""" Returns the starshipit labels for all pickings in self. """
|
|
labels = self.env['ir.attachment'].search([
|
|
('res_model', '=', 'stock.picking'),
|
|
('res_id', 'in', self.ids),
|
|
('name', '=like', 'LabelShipping-starshipit%'),
|
|
])
|
|
return {
|
|
'type': 'ir.actions.act_url',
|
|
'url': f'/delivery_starshipit/download_starshipit_labels/{",".join(map(str, labels.ids))}',
|
|
}
|