99 lines
4.1 KiB
Python
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
|