add payments, quote_number in sale

This commit is contained in:
raskolnikov 2023-02-27 10:46:56 -05:00
parent 5dd4826e1d
commit 42b2438fa0
12 changed files with 1084 additions and 943 deletions

16
account.xml Normal file
View File

@ -0,0 +1,16 @@
<?xml version="1.0"?>
<!--This file file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<record model="ir.action.report" id="report_payment">
<field name="name">Pagos</field>
<field name="model">account.move.line</field>
<field name="report_name">account.move.line</field>
<field name="report">optical_equipment/report/Payment.fodt</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_payment_keyword">
<field name="keyword">form_print</field>
<field name="model">account.move.line,-1</field>
<field name="action" ref="report_payment"/>
</record></tryton>

View File

@ -1,8 +1,10 @@
from trytond.model import ( from trytond.model import (
ModelSingleton, ModelSQL, ModelView, fields) ModelSingleton, ModelSQL, ModelView, fields)
from trytond.pyson import Id from trytond.pyson import Id
from trytond.modules.company.model import (
CompanyMultiValueMixin, CompanyValueMixin)
class Configuration(ModelSingleton, ModelSQL, ModelView): class Configuration(ModelSingleton, ModelSQL, ModelView, CompanyMultiValueMixin):
'Equipment Configuration' 'Equipment Configuration'
__name__='optical_equipment.configuration' __name__='optical_equipment.configuration'
@ -28,3 +30,7 @@ class Configuration(ModelSingleton, ModelSQL, ModelView):
moisture_uom = fields.Many2One('product.uom', "Moisture UOM", moisture_uom = fields.Many2One('product.uom', "Moisture UOM",
domain=[('category', '=', Id('optical_equipment', 'uom_cat_relative_humedity'))], domain=[('category', '=', Id('optical_equipment', 'uom_cat_relative_humedity'))],
depends=['moisture_min']) depends=['moisture_min'])
sale_quote_number = fields.Many2One('ir.sequence', "Sale Quote Number",
domain=[
('sequence_type', '=', Id('sale','sequence_type_sale'))
])

View File

@ -698,6 +698,10 @@ msgctxt "field:optical_equipment_maintenance.service,description:"
msgid "Description" msgid "Description"
msgstr "Descripción" msgstr "Descripción"
msgctxt "field:sale.sale,quote_number:"
msgid "Quote Number"
msgstr "Cotización #"
msgctxt "field:sale.sale,description:sale." msgctxt "field:sale.sale,description:sale."
msgid "Description" msgid "Description"
msgstr "Tiempo de Entrega" msgstr "Tiempo de Entrega"

BIN
report/Payment.fodt Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

27
sale.py
View File

@ -19,7 +19,7 @@ class Sale(metaclass=PoolMeta):
'Sale' 'Sale'
__name__ = 'sale.sale' __name__ = 'sale.sale'
quote_number = fields.Char("Quote Number", readonly=True)
sale_type = fields.Selection([('maintenance', 'Maintenance'), sale_type = fields.Selection([('maintenance', 'Maintenance'),
('equipments', 'Equipments'), ('equipments', 'Equipments'),
('replaces', 'Replaces')], "Sale Type", required=True, ('replaces', 'Replaces')], "Sale Type", required=True,
@ -112,13 +112,35 @@ class Sale(metaclass=PoolMeta):
return Shipment(**values) return Shipment(**values)
@classmethod
def set_quote_number(cls, sales):
'''
Fill the number field with the sale sequence
'''
pool = Pool()
Config = pool.get('optical_equipment.configuration')
config = Config(1)
for sale in sales:
if config.equipment_sequence != None:
if not sale.quote_number:
try:
sale.quote_number = config.sale_quote_number.get()
cls.save(sales)
except UserError:
raise UserError(str('Validation Error'))
else:
raise UserError(gettext('optical_equipment.msg_not_sequence_quote'))
@classmethod @classmethod
@ModelView.button @ModelView.button
@Workflow.transition('quotation') @Workflow.transition('quotation')
def quote(cls, sales): def quote(cls, sales):
pool = Pool() pool = Pool()
AdvancePaymentCondition = pool.get('sale.advance_payment.condition') AdvancePaymentCondition = pool.get('sale.advance_payment.condition')
super(Sale, cls).quote(sales) for sale in sales:
sale.check_for_quotation()
cls.set_quote_number(sales)
for sale in sales: for sale in sales:
sale.set_advance_payment_term() sale.set_advance_payment_term()
@ -157,6 +179,7 @@ class Sale(metaclass=PoolMeta):
sale.agended = True sale.agended = True
sale.save() sale.save()
cls.set_number(sales)
with transaction.set_context( with transaction.set_context(
queue_scheduled_at=config.sale_process_after, queue_scheduled_at=config.sale_process_after,
queue_batch=context.get('queue_batch', True)): queue_batch=context.get('queue_batch', True)):

View File

@ -1,6 +1,11 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!--This file file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. --> <!--This file file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
<tryton> <tryton>
<record model="ir.ui.view" id="sale_view_tree">
<field name="model">sale.sale</field>
<field name="inherit" ref="sale.sale_view_tree"/>
<field name="name">sale_tree</field>
</record>
<record model="ir.ui.view" id="sale_view_form"> <record model="ir.ui.view" id="sale_view_form">
<field name="model">sale.sale</field> <field name="model">sale.sale</field>
<field name="inherit" ref="sale.sale_view_form"/> <field name="inherit" ref="sale.sale_view_form"/>
@ -11,6 +16,10 @@
<field name="inherit" ref="sale.product_view_list_sale_line"/> <field name="inherit" ref="sale.product_view_list_sale_line"/>
<field name="name">product_list_sale_line</field> <field name="name">product_list_sale_line</field>
</record> </record>
<record model="ir.sequence" id="sequence_quote_sale">
<field name="name">Sale Quote</field>
<field name="sequence_type" ref="sale.sequence_type_sale"/>
</record>
<record model="ir.action.report" id="report_sale"> <record model="ir.action.report" id="report_sale">
<field name="name">Sale Equipments</field> <field name="name">Sale Equipments</field>
<field name="model">sale.sale</field> <field name="model">sale.sale</field>

View File

@ -20,6 +20,7 @@ depends:
xml: xml:
address.xml address.xml
party.xml party.xml
account.xml
product.xml product.xml
equipment.xml equipment.xml
contract.xml contract.xml

View File

@ -16,6 +16,9 @@ this repository contains the full copyright notices and license terms. -->
<label name="contract_sequence"/> <label name="contract_sequence"/>
<field name="contract_sequence"/> <field name="contract_sequence"/>
<newline/> <newline/>
<label name="sale_quote_number"/>
<field name="sale_quote_number"/>
<newline/>
<separator id="environmental_conditions" string="Environmental Conditions" colspan="4"/> <separator id="environmental_conditions" string="Environmental Conditions" colspan="4"/>
<label name="temperature_min"/> <label name="temperature_min"/>
<field name="temperature_min"/> <field name="temperature_min"/>

View File

@ -2,6 +2,10 @@
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of <!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. --> this repository contains the full copyright notices and license terms. -->
<data> <data>
<xpath expr="//label[@name='number']" position="before">
<label name="quote_number"/>
<field name="quote_number"/>
</xpath>
<xpath expr="//field[@name='reference']" position="after"> <xpath expr="//field[@name='reference']" position="after">
<newline/> <newline/>
<label name="sale_type"/> <label name="sale_type"/>

11
view/sale_tree.xml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//field[@name='number']" position="before">
<field name="quote_number"/>
</xpath>
<xpath expr="//field[@name='number']" position="replace">
<field name="number"/>
</xpath>
</data>