diff --git a/locale/es.po b/locale/es.po
index b5188ec..3b7a508 100644
--- a/locale/es.po
+++ b/locale/es.po
@@ -344,7 +344,7 @@ msgstr "Ventas"
msgctxt "field:crm.opportunity,source:"
msgid "Source"
-msgstr "Original"
+msgstr "Origen"
msgctxt "field:crm.opportunity,start_date:"
msgid "Start Date"
@@ -801,11 +801,23 @@ msgctxt ""
msgid "Analysis"
msgstr "Analisis"
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_crm_opportunity_form_domain_cancelled"
+msgid "Cancelled"
+msgstr "Cancelado"
+
msgctxt ""
"model:ir.action.act_window.domain,name:act_crm_opportunity_form_domain_internal_validation"
msgid "Internal Validation"
msgstr "Validación Interna"
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_crm_opportunity_form_domain_lost"
+msgid "Lost"
+msgstr "Perdido"
+
msgctxt ""
"model:ir.action.act_window.domain,name:act_crm_opportunity_form_domain_prospecting"
msgid "Prospecting"
@@ -2087,7 +2099,7 @@ msgstr "Teléfono"
msgctxt "selection:crm.opportunity,source:"
msgid "Referred"
-msgstr ""
+msgstr "Referido"
msgctxt "selection:crm.opportunity,source:"
msgid "Salesman"
diff --git a/opportunity.py b/opportunity.py
index 1eccced..9fa23e1 100644
--- a/opportunity.py
+++ b/opportunity.py
@@ -168,6 +168,7 @@ class Opportunity(
], "Source", required=True, select=True)
# party_evaluations = fields.One2Many('crm.party_evaluation', 'opportunity', 'Party Evaluations')
party_validations = fields.One2Many('crm.validation.line', 'origin', 'Party Validations')
+ is_prospect = fields.Function(fields.Boolean('Is Prospect'), 'get_is_prospect')
# del _states_start, _depends_start
@@ -239,11 +240,26 @@ class Opportunity(
'lost': {
'invisible': ~Eval('state').in_(['review', 'internal_validation']),
},
- # 'cancelled': {
- # 'invisible': ~Eval('state').in_(['prospecting']),
- # },
+ 'cancelled': {
+ 'invisible': ~Eval('state').in_(['prospecting','quotation']),
+ },
})
+ @fields.depends('party')
+ def get_is_prospect(self,name=None):
+ res = True
+ if self.party:
+ Invoice = Pool().get('account.invoice')
+ invoices = Invoice.search([
+ ('party','=',self.party.id),
+ ('type','=','out'),
+ ('state','!=','draft')
+ ])
+ if len(invoices) > 0:
+ res = False
+ return res
+
+
@staticmethod
def default_state():
return 'prospecting'
@@ -416,7 +432,45 @@ class Opportunity(
@ModelView.button
@Workflow.transition('analysis')
def analysis(cls, records):
- pass
+ cls.check_party(records)
+
+
+ @classmethod
+ def check_party(cls,records):
+ ValidationTemplate = Pool().get('crm.validation_template')
+ ValidationLine = Pool().get('crm.validation.line')
+ def get_lines(template):
+ lines = []
+ for line in template.lines:
+ value = {
+ 'origin':record.id,
+ 'party':record.party.id,
+ 'sequence':line.sequence,
+ 'line_ask':line.ask
+ }
+ lines.append(value)
+ lines = ValidationLine.create(lines)
+
+ return lines
+
+ for record in records:
+ lines = None
+ if record.is_prospect:
+ template, = ValidationTemplate.search([
+ ('type','=','prospect'),
+ ])
+ lines = get_lines(template)
+
+ else:
+ template, = ValidationTemplate.search([
+ ('type','=','client'),
+ ])
+ lines = get_lines(template)
+ if lines:
+ # cls.write([record.id],{'party_validation':lines})
+ # record.party_validations = [('create',lines)]
+ record.party_validations = lines
+ record.save()
@classmethod
@ModelView.button
@@ -441,7 +495,9 @@ class Opportunity(
@Workflow.transition('quotation')
@set_employee('converted_by')
def quotation(cls, records):
- pass
+ # Analyze if party validation is true in all lines
+ cls.get_party_validation(records)
+ # cls.procces_opportunity(records)
@property
def is_forecast(self):
@@ -455,6 +511,19 @@ class Opportunity(
def accepted(cls, records):
cls.procces_opportunity(records)
+ @classmethod
+ def get_party_validation(cls, records):
+
+ for opportunity in records:
+ # print(opportunity,'Opportunity')
+ # print(opportunity.party_validations,'validations')
+ if opportunity.type == 'contract':
+ pass
+ # cls.procces_opportunity(records)
+
+ else:
+ pass
+
@classmethod
def procces_opportunity(cls, records):
for opportunity in records:
@@ -479,15 +548,15 @@ class Opportunity(
'state': 'lost',
})
- # @classmethod
- # @ModelView.button
- # @Workflow.transition('cancelled')
- # def cancelled(cls, records):
- # pass
- # Date = Pool().get('ir.date')
- # cls.write([o for o in records if o.is_forecast], {
- # 'end_date': Date.today(),
- # })
+ @classmethod
+ @ModelView.button
+ @Workflow.transition('cancelled')
+ def cancelled(cls, records):
+ pass
+ Date = Pool().get('ir.date')
+ cls.write([o for o in records if o.is_forecast], {
+ 'end_date': Date.today(),
+ })
@staticmethod
def _sale_won_states():
diff --git a/opportunity.xml b/opportunity.xml
index 31fc1cf..259e8a9 100644
--- a/opportunity.xml
+++ b/opportunity.xml
@@ -127,7 +127,7 @@ this repository contains the full copyright notices and license terms. -->
-
eval="[('state', '=', 'lost')]" pyson="1"/>
- -->
+
+
All
diff --git a/party_validation.py b/party_validation.py
index c7401cc..637dbc1 100644
--- a/party_validation.py
+++ b/party_validation.py
@@ -1,6 +1,6 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
-from datetime import datetime
+from datetime import datetime, date
from trytond.report import Report
from trytond.model import ModelView, ModelSQL, fields, Workflow
from trytond.pyson import Eval, If, In, Get
@@ -39,7 +39,7 @@ class ValidationLine(ModelSQL, ModelView):
party = fields.Many2One('party.party',
'Party', required=True)
sequence = fields.Integer('Sequence', required=True)
- date_validation = fields.Date('Date', required=True)
+ date_validation = fields.Date('Date')
line_ask = fields.Char('Ask', required=True, select=True)
response = fields.Boolean('Response')
comment = fields.Text('Comments')
@@ -48,3 +48,11 @@ class ValidationLine(ModelSQL, ModelView):
def __setup__(cls):
super(ValidationLine, cls).__setup__()
cls._order.insert(0, ('sequence', 'ASC'))
+
+ @fields.depends('response')
+ def on_change_response(self):
+ if self.response:
+ self.date_validation = date.today()
+ else:
+ self.date_validation = None
+
diff --git a/view/inheritance_party_validation.xml b/view/inheritance_party_validation.xml
new file mode 100644
index 0000000..a24af68
--- /dev/null
+++ b/view/inheritance_party_validation.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/view/validation_line_form.xml b/view/validation_line_form.xml
index b75f5ba..75c124e 100644
--- a/view/validation_line_form.xml
+++ b/view/validation_line_form.xml
@@ -2,13 +2,12 @@