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.

70 lines
2.4 KiB

  1. # Copyright 2019 Coop IT Easy SCRLfs
  2. # @author Pierrick Brun <pierrick.brun@akretion.com>
  3. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
  4. import base64
  5. from odoo import fields, models, api, _
  6. class PosOrder(models.Model):
  7. _inherit = "pos.order"
  8. email_receipt_sent = fields.Boolean()
  9. @api.model
  10. def send_mail_receipt(
  11. self, pos_reference, email, body_from_ui, force=True
  12. ):
  13. order = self.search([("pos_reference", "=", pos_reference)])
  14. if len(order) < 1:
  15. return _("Error: no order found")
  16. if order.email_receipt_sent:
  17. return _("E-mail already sent")
  18. if not email and not order.partner_id and not order.partner_id.email:
  19. return _(
  20. "Cannot send the ticket, no email address found for the client"
  21. )
  22. mail_template = self.env.ref("pos_mail_receipt.email_send_ticket")
  23. if email:
  24. mail_template.email_to = email
  25. else:
  26. mail_template.email_to = order.partner_id.email
  27. base64_pdf = self.env["ir.actions.report"]._run_wkhtmltopdf(
  28. [body_from_ui.encode("utf-16")],
  29. landscape=False,
  30. specific_paperformat_args={
  31. "data-report-margin-top": 10,
  32. "data-report-header-spacing": 10,
  33. },
  34. )
  35. attachment = self.env["ir.attachment"].create(
  36. {
  37. "name": pos_reference,
  38. "datas_fname": _("Receipt_{}.pdf".format(pos_reference)),
  39. "type": "binary",
  40. "mimetype": "application/x-pdf",
  41. "db_datas": base64.encodestring(base64_pdf),
  42. "res_model": "pos.order",
  43. "res_id": order.id,
  44. }
  45. )
  46. mail_template.send_mail(
  47. order.id,
  48. force_send=force,
  49. email_values={"attachment_ids": [attachment.id]},
  50. )
  51. order.email_receipt_sent = True
  52. @api.model
  53. def create_from_ui(self, orders):
  54. res = super(PosOrder, self).create_from_ui(orders)
  55. for order in orders:
  56. if "email" in order["data"]:
  57. self.send_mail_receipt(
  58. order["data"]["name"],
  59. order["data"]["email"],
  60. order["data"]["body_from_ui"],
  61. force=False,
  62. )
  63. return res