diff --git a/odex25_purchase/odex25_annual_purchase/data/new_mail.xml b/odex25_purchase/odex25_annual_purchase/data/new_mail.xml index 0efb10082..e7df48d8f 100644 --- a/odex25_purchase/odex25_annual_purchase/data/new_mail.xml +++ b/odex25_purchase/odex25_annual_purchase/data/new_mail.xml @@ -1,33 +1,69 @@ - + Purchase Order: Send RFQ - طلب عرض سعر ${object.name or ''} + Request for Quotation ${object.name or ''} -
-

- السادة ${object.vendor_id.name} +

+

+ Dear ${object.vendor_id.name} % if object.vendor_id.parent_id: (${object.vendor_id.parent_id.name}) % endif

- يُرفق إليكم طلب عرض السعر الخاص بالطلب رقم ${object.name} + Please find attached the request for quotation for order ${object.name} % if object.partner_ref: - بالمرجع: ${object.partner_ref} + Reference: ${object.partner_ref} % endif - من ${object.company_id.name}. + from ${object.company_id.name}.

- في حال وجود أي استفسارات، لا تترددوا في التواصل معنا بالرد على هذا الايميل . + If you have any questions, please feel free to reply to this email.

- مع أطيب التحيات، + Best regards,

-
+
+
${(object.name or '').replace('/','_')} - ar + ${object.vendor_id.lang or object.partner_id.lang or 'en_US'}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po b/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po index 58904ccf6..30fb763e8 100644 --- a/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po +++ b/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po @@ -1292,3 +1292,49 @@ msgstr "إعادة إرسال طلب عرض سعر" +#. module: odex25_annual_purchase +#: model:mail.template,body_html:odex25_annual_purchase.email_template_annual_rfq_new +msgid "" +"
\n" +"

\n" +" Dear ${object.vendor_id.name}\n" +" % if object.vendor_id.parent_id:\n" +" (${object.vendor_id.parent_id.name})\n" +" % endif\n" +"

\n" +" Please find attached the request for quotation for order ${object.name}\n" +" % if object.partner_ref:\n" +" Reference: ${object.partner_ref}\n" +" % endif\n" +" from ${object.company_id.name}.\n" +"

\n" +" If you have any questions, please feel free to reply to this email.\n" +"

\n" +" Best regards,\n" +"

\n" +"
\n" +" " +msgstr "" +"
\n" +"

\n" +" السادة/ ${object.vendor_id.name}\n" +" % if object.vendor_id.parent_id:\n" +" (${object.vendor_id.parent_id.name})\n" +" % endif\n" +"

\n" +" نرجو منكم التكرّم بالاطلاع على طلب عرض السعر المرفق الخاص بالطلب رقم ${object.name}\n" +" % if object.partner_ref:\n" +" (المرجع: ${object.partner_ref})\n" +" % endif\n" +" والتابع لـ ${object.company_id.name}.\n" +"

\n" +" في حال وجود أي استفسارات، يُرجى عدم التردد في التواصل معنا عبر الرد على هذا البريد.\n" +"

\n" +" مع خالص التحية والتقدير،\n" +"

\n" +"
" + +#. module: odex25_annual_purchase +#: model:mail.template,subject:odex25_annual_purchase.email_template_annual_rfq_new +msgid "Request for Quotation ${object.name or ''}" +msgstr "طلب عرض سعر ${object.name or ''}" diff --git a/odex25_purchase/odex25_annual_purchase/models/annual_rfq.py b/odex25_purchase/odex25_annual_purchase/models/annual_rfq.py index be4f50d4c..ae53e3e1a 100644 --- a/odex25_purchase/odex25_annual_purchase/models/annual_rfq.py +++ b/odex25_purchase/odex25_annual_purchase/models/annual_rfq.py @@ -76,6 +76,23 @@ class PurchaseRFQ(models.Model): string="Technical Attachments", help="Upload technical offer documents here" ) + @api.model + def _get_picking_type(self, company_id): + picking_type = self.env['stock.picking.type'].search([('code', '=', 'incoming'), ('warehouse_id.company_id', '=', company_id)]) + if not picking_type: + picking_type = self.env['stock.picking.type'].search([('code', '=', 'incoming'), ('warehouse_id', '=', False)]) + return picking_type[:1] + + @api.model + def _default_picking_type(self): + return self._get_picking_type(self.env.context.get('company_id') or self.env.company.id) + + dest_address_id = fields.Many2one('res.partner', domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", string='Drop Ship Address', + help="Put an address if you want to deliver directly from the vendor to the customer. " + "Otherwise, keep empty to deliver to your own company.") + picking_type_id = fields.Many2one('stock.picking.type', 'Deliver To', required=True, default=_default_picking_type, domain="['|', ('warehouse_id', '=', False), ('warehouse_id.company_id', '=', company_id)]", + help="This will determine operation type of incoming shipment") + @api.depends('committe_members') def _compute_no_approve(self): for rec in self: @@ -90,7 +107,22 @@ class PurchaseRFQ(models.Model): and rec.purchase_commitee and rec.state in ('committee', 'draft', 'sent') ) - + @api.model + def default_get(self, fields): + res = super(PurchaseRFQ, self).default_get(fields) + if self._context.get('default_source_request_ref'): + request = self.env['odx.annual.request'].browse(self._context['default_source_request_ref']) + lines = [] + for l in request.line_ids: + lines.append((0, 0, { + 'product_id': l.product_id.id, + 'description': l.description or l.technical_spec or l.product_id.display_name, + 'quantity': l.quantity or 1.0, + 'uom_id': (l.uom_id and l.uom_id.id) or l.product_id.uom_po_id.id, + 'price_unit': l.price_unit or 0.0, + })) + res['line_ids'] = lines + return res @api.model def copy(self, default=None): @@ -133,25 +165,31 @@ class PurchaseRFQ(models.Model): def action_refuse_rfq(self): self.ensure_one() - member = self.committe_members.filtered(lambda m: m.user_id == self.env.user) - if member and member.refused: - raise UserError(_("You have already refused this RFQ before.")) + member = self.env['committe.member'].search([ + ('rfq_id', '=', self.id), + ('user_id', '=', self.env.user.id), + ], limit=1) + vals = { + 'refused': True, + 'select': False, + 'selection_reason': False, + } + if member: + member.write(vals) else: self.env['committe.member'].create({ 'rfq_id': self.id, 'user_id': self.env.user.id, - 'refused': True, - 'select': False + **vals }) - self._check_committee_rejection() return { 'type': 'ir.actions.act_window', - 'name': _('Select Reason'), + 'name': _('Refuse Reason'), 'res_model': 'refuse.reason.rfq', 'view_mode': 'form', 'target': 'new', @@ -160,6 +198,35 @@ class PurchaseRFQ(models.Model): } } + # def action_refuse_rfq(self): + # self.ensure_one() + # member = self.committe_members.filtered(lambda m: m.user_id == self.env.user) + # + # if member and member.refused: + # raise UserError(_("You have already refused this RFQ before.")) + # + # + # else: + # self.env['committe.member'].create({ + # 'rfq_id': self.id, + # 'user_id': self.env.user.id, + # 'refused': True, + # 'select': False + # }) + # + # self._check_committee_rejection() + # + # return { + # 'type': 'ir.actions.act_window', + # 'name': _('Select Reason'), + # 'res_model': 'refuse.reason.rfq', + # 'view_mode': 'form', + # 'target': 'new', + # 'context': { + # 'default_rfq_id': self.id + # } + # } + def _check_committee_rejection(self): @@ -250,7 +317,7 @@ class PurchaseRFQ(models.Model): 'default_use_template': bool(template), 'default_template_id': template.id if template else False, 'default_composition_mode': 'comment', - 'custom_layout': "mail.mail_notification_paynow", + # 'custom_layout': "mail.mail_notification_paynow", 'force_email': True, 'mail_post_autofollow': True, diff --git a/odex25_purchase/odex25_annual_purchase/views/annual_request_views.xml b/odex25_purchase/odex25_annual_purchase/views/annual_request_views.xml index 54dae2245..3eeb63532 100644 --- a/odex25_purchase/odex25_annual_purchase/views/annual_request_views.xml +++ b/odex25_purchase/odex25_annual_purchase/views/annual_request_views.xml @@ -76,6 +76,8 @@ + + @@ -84,8 +86,6 @@ - - diff --git a/odex25_purchase/odex25_annual_purchase/views/annual_rfq_views.xml b/odex25_purchase/odex25_annual_purchase/views/annual_rfq_views.xml index 1c630c7be..88f36cfe1 100644 --- a/odex25_purchase/odex25_annual_purchase/views/annual_rfq_views.xml +++ b/odex25_purchase/odex25_annual_purchase/views/annual_rfq_views.xml @@ -131,6 +131,15 @@ + + + + + @@ -166,15 +175,8 @@
- - - - - - - + + diff --git a/odex25_purchase/odex25_annual_purchase/views/report_annual_rfq.xml b/odex25_purchase/odex25_annual_purchase/views/report_annual_rfq.xml index 92ec1d1b1..ec25dabd1 100644 --- a/odex25_purchase/odex25_annual_purchase/views/report_annual_rfq.xml +++ b/odex25_purchase/odex25_annual_purchase/views/report_annual_rfq.xml @@ -2,77 +2,144 @@ + +