You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
2.0 KiB

7 years ago
7 years ago
  1. # -*- coding: utf-8 -*-
  2. # © 2015 Valentin CHEMIERE <valentin.chemiere@akretion.com>
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. from odoo import api, models, fields
  5. from odoo.tools.translate import _
  6. import logging
  7. _logger = logging.getLogger(__name__)
  8. class StockPicking(models.Model):
  9. _inherit = 'stock.picking'
  10. availability_sent_by_sms = fields.Boolean(default=False)
  11. # TODO use a templating instead
  12. @api.model
  13. def _prepare_availability_by_sms_notification(self):
  14. gateway = self.env['sms.gateway'].search([
  15. ('default_gateway', '=', True)], limit=1)
  16. return {
  17. 'gateway_id': gateway.id,
  18. 'message': _('Your picking %s is ready to transfer.') % self.name,
  19. 'mobile': self.partner_id.mobile,
  20. 'partner_id': self.partner_id.id,
  21. 'state': 'draft',
  22. 'validity': gateway.validity,
  23. 'classes': gateway.classes,
  24. 'deferred': gateway.deferred,
  25. 'priority': gateway.priority,
  26. 'coding': gateway.coding,
  27. 'nostop': gateway.nostop,
  28. 'company_id': self.company_id.id,
  29. }
  30. @api.model
  31. def _get_send_picking_availability_by_sms_domain(self):
  32. return [
  33. ('state', '=', 'assigned'),
  34. ('availability_sent_by_sms', '=', False),
  35. ('picking_type_id.code', '=', 'outgoing'),
  36. ]
  37. @api.model
  38. def _cron_send_picking_availability_by_sms(self):
  39. domain = self._get_send_picking_availability_by_sms_domain()
  40. pickings = self.env['stock.picking'].search(domain)
  41. total = len(pickings)
  42. for idx, picking in enumerate(pickings):
  43. _logger.debug('Send Sms for picking %s, progress %s/%s', picking,
  44. idx, total)
  45. vals = picking._prepare_availability_by_sms_notification()
  46. self.env['sms.sms'].create(vals)
  47. picking.write({'availability_sent_by_sms': True})
  48. picking._cr.commit()