sale/models/onboarding_onboarding_step.py

99 lines
4.1 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
import base64
from odoo import _, api, Command, models
from odoo.tools import file_open
class OnboardingStep(models.Model):
_inherit = 'onboarding.onboarding.step'
@api.model
def action_open_step_sale_order_confirmation(self):
self.env.company.get_chart_of_accounts_or_fail()
action = {
'type': 'ir.actions.act_window',
'name': _('Choose how to confirm quotations'),
'res_model': 'sale.payment.provider.onboarding.wizard',
'view_mode': 'form',
'views': [(self.env.ref('payment.payment_provider_onboarding_wizard_form').id, 'form')],
'target': 'new',
}
return action
@api.model
def _get_sample_sales_order(self):
""" Get a sample quotation or create one if it does not exist. """
# use current user as partner
partner = self.env.user.partner_id
company_id = self.env.company.id
# is there already one?
sample_sales_order = self.env['sale.order'].search([
('company_id', '=', company_id),
('partner_id', '=', partner.id),
('state', '=', 'draft'),
], limit=1)
if not sample_sales_order:
# take any existing product or create one
product = self.env['product.product'].search([], limit=1)
if not product:
with file_open('product/static/img/product_product_13-image.jpg', 'rb') as default_image_stream:
product = self.env['product.product'].create({
'name': _('Sample Product'),
'active': False,
'image_1920': base64.b64encode(default_image_stream.read()),
})
product.product_tmpl_id.active = False
sample_sales_order = self.env['sale.order'].create({
'partner_id': partner.id,
'order_line': [
Command.create({
'name': _('Sample Order Line'),
'product_id': product.id,
'product_uom_qty': 10,
'price_unit': 123,
})
]
})
return sample_sales_order
@api.model
def action_open_step_sample_quotation(self):
""" Onboarding step for sending a sample quotation. Open a window to compose an email,
with the edi_invoice_template message loaded by default. """
sample_sales_order = self._get_sample_sales_order()
template = self.env.ref('sale.email_template_edi_sale', False)
self.env['mail.compose.message'].with_context(
mark_so_as_sent=True,
default_email_layout_xmlid='mail.mail_notification_layout_with_responsible_signature',
proforma=self.env.context.get('proforma', False),
).create({
'res_ids': sample_sales_order.ids,
'template_id': template.id if template else False,
'model': sample_sales_order._name,
'composition_mode': 'comment',
})._action_send_mail()
self.action_validate_step('sale.onboarding_onboarding_step_sample_quotation')
sale_quotation_onboarding = self.env.ref('sale.onboarding_onboarding_sale_quotation', raise_if_not_found=False)
if sale_quotation_onboarding:
sale_quotation_onboarding.action_close()
view_id = self.env.ref('sale.view_order_form').id
action = self.env['ir.actions.actions']._for_xml_id('sale.action_orders')
action.update({
'view_mode': 'form',
'views': [[view_id, 'form']],
'target': 'main',
})
return action
@api.model
def action_validate_step_payment_provider(self):
validation_response = super().action_validate_step_payment_provider()
if self.env.company.sale_onboarding_payment_method: # Set if the flow is/was done from the Sales panel
return self.action_validate_step('sale.onboarding_onboarding_step_sale_order_confirmation')
return validation_response