add check to avoid to confirm 2 lines of quotations
add check to avoid to convert oportunity without quotation confirmed
This commit is contained in:
parent
50186a3682
commit
825750c439
|
@ -0,0 +1,39 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:configurator.design,opportunity:"
|
||||
msgid "Opportunity"
|
||||
msgstr "Oportunitat"
|
||||
|
||||
msgctxt "field:configurator.quotation.line,state:"
|
||||
msgid "State"
|
||||
msgstr "Estat"
|
||||
|
||||
msgctxt "field:sale.opportunity,design:"
|
||||
msgid "Design"
|
||||
msgstr "Disseny"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_no_quotation_confirmed"
|
||||
msgid "No Quotation has been confirmed."
|
||||
msgstr "No s'ha confirmat cap cotització"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_only_one_quotation_confirmed_allowed"
|
||||
msgid "Only one Confirmed Quotation allowed."
|
||||
msgstr "Només es permet una cotització en estat confirmat."
|
||||
|
||||
msgctxt "selection:configurator.quotation.line,state:"
|
||||
msgid "Canceled"
|
||||
msgstr "Cancel·lat"
|
||||
|
||||
msgctxt "selection:configurator.quotation.line,state:"
|
||||
msgid "Confirmed"
|
||||
msgstr "Confirmat"
|
||||
|
||||
msgctxt "selection:configurator.quotation.line,state:"
|
||||
msgid "Quotation"
|
||||
msgstr "Pressupost"
|
||||
|
||||
msgctxt "selection:configurator.quotation.line,state:"
|
||||
msgid "Rejected"
|
||||
msgstr "Rebutjat"
|
|
@ -0,0 +1,39 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:configurator.design,opportunity:"
|
||||
msgid "Opportunity"
|
||||
msgstr "Oportunidad"
|
||||
|
||||
msgctxt "field:configurator.quotation.line,state:"
|
||||
msgid "State"
|
||||
msgstr "Estado"
|
||||
|
||||
msgctxt "field:sale.opportunity,design:"
|
||||
msgid "Design"
|
||||
msgstr "Diseño"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_no_quotation_confirmed"
|
||||
msgid "No Quotation has been confirmed."
|
||||
msgstr "No hay ninguna cotización confirmada."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_only_one_quotation_confirmed_allowed"
|
||||
msgid "Only one Confirmed Quotation allowed."
|
||||
msgstr "Sólo se permite una cotización en estado confirmado."
|
||||
|
||||
msgctxt "selection:configurator.quotation.line,state:"
|
||||
msgid "Canceled"
|
||||
msgstr "Cancelado"
|
||||
|
||||
msgctxt "selection:configurator.quotation.line,state:"
|
||||
msgid "Confirmed"
|
||||
msgstr "Confirmado"
|
||||
|
||||
msgctxt "selection:configurator.quotation.line,state:"
|
||||
msgid "Quotation"
|
||||
msgstr "Presupuesto"
|
||||
|
||||
msgctxt "selection:configurator.quotation.line,state:"
|
||||
msgid "Rejected"
|
||||
msgstr "Rechazada"
|
|
@ -0,0 +1,13 @@
|
|||
<?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. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.message" id="msg_no_quotation_confirmed">
|
||||
<field name="text">No Quotation has been confirmed.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_only_one_quotation_confirmed_allowed">
|
||||
<field name="text">Only one Confirmed Quotation allowed.</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
|
@ -2,6 +2,8 @@ from trytond.model import fields
|
|||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Eval, If
|
||||
from trytond.modules.product import price_digits
|
||||
from trytond.exceptions import UserError
|
||||
from trytond.i18n import gettext
|
||||
|
||||
STATES = [
|
||||
('quotation', 'Quotation'),
|
||||
|
@ -48,6 +50,18 @@ class Design(metaclass=PoolMeta):
|
|||
template.list_price = quote.manual_list_price
|
||||
template.save()
|
||||
|
||||
@classmethod
|
||||
def validate(cls, designs):
|
||||
for design in designs:
|
||||
design.check_quotation_confirmed()
|
||||
|
||||
def check_quotation_confirmed(self):
|
||||
confirmed = [x for x in self.prices if x.state == 'confirmed']
|
||||
if confirmed and len(confirmed) > 1:
|
||||
raise UserError(gettext(
|
||||
'product_dynamic_configurator_sale_opportunity.msg_only_one_quotation_confirmed_allowed'))
|
||||
|
||||
|
||||
class QuotationLine(metaclass=PoolMeta):
|
||||
__name__ = "configurator.quotation.line"
|
||||
|
||||
|
@ -115,13 +129,20 @@ class SaleOpportunity(metaclass=PoolMeta):
|
|||
designs = []
|
||||
rejected_lines = []
|
||||
for opportunity in opportunities:
|
||||
if not opportunity.design:
|
||||
continue
|
||||
designs += opportunity.design
|
||||
confirmed = opportunity.get_quoted_lines(opportunity.design,
|
||||
'confirmed')
|
||||
if not confirmed:
|
||||
raise UserError(gettext(
|
||||
'product_dynamic_configurator_sale_opportunity.msg_no_quotation_confirmed'))
|
||||
|
||||
rejected_lines += opportunity.get_quoted_lines(opportunity.design,
|
||||
'quotation')
|
||||
|
||||
QuoteLine.write(rejected_lines, {'state': 'rejected'})
|
||||
Design.process(designs)
|
||||
|
||||
super().convert(opportunities)
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -4,4 +4,5 @@ depends:
|
|||
sale_opportunity
|
||||
product_dynamic_configurator
|
||||
xml:
|
||||
opportunity.xml
|
||||
opportunity.xml
|
||||
message.xml
|
||||
|
|
Loading…
Reference in New Issue