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:
Àngel Àlvarez 2021-10-11 13:32:08 +02:00
parent 50186a3682
commit 825750c439
5 changed files with 115 additions and 2 deletions

39
locale/ca.po Normal file
View File

@ -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"

39
locale/es.po Normal file
View File

@ -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"

13
message.xml Normal file
View File

@ -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>

View File

@ -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

View File

@ -4,4 +4,5 @@ depends:
sale_opportunity
product_dynamic_configurator
xml:
opportunity.xml
opportunity.xml
message.xml