From 5e7a41fa3baf7ae353c0525483e42d107ac8dacb Mon Sep 17 00:00:00 2001 From: camilogs Date: Fri, 28 Jul 2023 00:28:30 +0000 Subject: [PATCH 01/17] =?UTF-8?q?Se=20hace=20prueba=20de=20creaci=C3=B3n?= =?UTF-8?q?=20de=20prospecto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/scenario_sale_opportunity_management.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/scenario_sale_opportunity_management.rst b/tests/scenario_sale_opportunity_management.rst index 6669776..5528010 100644 --- a/tests/scenario_sale_opportunity_management.rst +++ b/tests/scenario_sale_opportunity_management.rst @@ -10,3 +10,13 @@ Imports:: Activate modules:: >>> config = activate_modules('sale_opportunity_management') + +--------------------------------------------------------------------------------------------- +Como administrador quiero poder registrar un prospecto para lugo poder hacerle un seguimiento +--------------------------------------------------------------------------------------------- + +Crear prospecto:: + >>> Prospect = Model.get('call.prospect') + >>> prospect = Prospect() + >>> prospect.name = 'guchito S.A.S' + >>> prospect.save() \ No newline at end of file -- 2.45.2 From 3d5c3e17e096b05c037efa1792a8f6ec2e8bebd7 Mon Sep 17 00:00:00 2001 From: camilogs Date: Fri, 28 Jul 2023 00:30:32 +0000 Subject: [PATCH 02/17] Se crea modelo inicial de prospecto --- prospect.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 prospect.py diff --git a/prospect.py b/prospect.py new file mode 100644 index 0000000..cf1237e --- /dev/null +++ b/prospect.py @@ -0,0 +1,9 @@ +# 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 trytond.model import ModelSQL, ModelView, fields + +class Prospect(ModelSQL, ModelView): + 'Prospecto' + __name__ = 'call.prospect' + + name = fields.Char('Name') \ No newline at end of file -- 2.45.2 From 76b4485c22bcd744fe67b9759c2dda9214d64041 Mon Sep 17 00:00:00 2001 From: camilogs Date: Fri, 28 Jul 2023 01:09:31 +0000 Subject: [PATCH 03/17] Se crea modelo inicial de prospecto --- __init__.py | 2 ++ prospect.py | 3 ++- tests/scenario_sale_opportunity_management.rst | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/__init__.py b/__init__.py index 2759f8e..eb2cb48 100644 --- a/__init__.py +++ b/__init__.py @@ -1,10 +1,12 @@ from trytond.pool import Pool +from . import prospect __all__ = ['register'] def register(): Pool.register( + prospect.Prospect, module='sale_opportunity_management', type_='model') Pool.register( module='sale_opportunity_management', type_='wizard') diff --git a/prospect.py b/prospect.py index cf1237e..2cee49e 100644 --- a/prospect.py +++ b/prospect.py @@ -4,6 +4,7 @@ from trytond.model import ModelSQL, ModelView, fields class Prospect(ModelSQL, ModelView): 'Prospecto' - __name__ = 'call.prospect' + + __name__ = 'sale.prospect' name = fields.Char('Name') \ No newline at end of file diff --git a/tests/scenario_sale_opportunity_management.rst b/tests/scenario_sale_opportunity_management.rst index 5528010..7124b87 100644 --- a/tests/scenario_sale_opportunity_management.rst +++ b/tests/scenario_sale_opportunity_management.rst @@ -16,7 +16,7 @@ Como administrador quiero poder registrar un prospecto para lugo poder hacerle u --------------------------------------------------------------------------------------------- Crear prospecto:: - >>> Prospect = Model.get('call.prospect') + >>> Prospect = Model.get('sale.prospect') >>> prospect = Prospect() >>> prospect.name = 'guchito S.A.S' >>> prospect.save() \ No newline at end of file -- 2.45.2 From f9f929ae1e86b030229f5e4fb5b45f6ea85ca51d Mon Sep 17 00:00:00 2001 From: camilogs Date: Fri, 28 Jul 2023 02:09:17 +0000 Subject: [PATCH 04/17] =?UTF-8?q?Se=20agrega=20seguimiento=20de=20prospect?= =?UTF-8?q?o=20y=20se=20hace=20relaci=C3=B3n=20con=20prospecto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __init__.py | 2 ++ prospect.py | 3 ++- prospect_trace.py | 19 +++++++++++++++++++ .../scenario_sale_opportunity_management.rst | 18 +++++++++++++++++- 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 prospect_trace.py diff --git a/__init__.py b/__init__.py index eb2cb48..387eb22 100644 --- a/__init__.py +++ b/__init__.py @@ -1,5 +1,6 @@ from trytond.pool import Pool from . import prospect +from . import prospect_trace __all__ = ['register'] @@ -7,6 +8,7 @@ __all__ = ['register'] def register(): Pool.register( prospect.Prospect, + prospect_trace.ProspectTrace, module='sale_opportunity_management', type_='model') Pool.register( module='sale_opportunity_management', type_='wizard') diff --git a/prospect.py b/prospect.py index 2cee49e..d6c7523 100644 --- a/prospect.py +++ b/prospect.py @@ -7,4 +7,5 @@ class Prospect(ModelSQL, ModelView): __name__ = 'sale.prospect' - name = fields.Char('Name') \ No newline at end of file + name = fields.Char('Name') + tel = fields.Integer('Tel') \ No newline at end of file diff --git a/prospect_trace.py b/prospect_trace.py new file mode 100644 index 0000000..a71de0d --- /dev/null +++ b/prospect_trace.py @@ -0,0 +1,19 @@ +# 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 trytond.model import ModelSQL, ModelView, fields + +class ProspectTrace(ModelSQL, ModelView): + 'Seguimiento de un prospecto' + + __name__ = 'sale.prospect_trace' + + prospect = fields.Many2One('sale.prospect', 'Prospect') + + @fields.depends('prospect') + def on_change_prospect(self): + if self.prospect: + self.prospect_name = self.prospect.name + self.prospect_tel = self.prospect.tel + + prospect_name = fields.Char('Name') + prospect_tel = fields.Integer('Tel') \ No newline at end of file diff --git a/tests/scenario_sale_opportunity_management.rst b/tests/scenario_sale_opportunity_management.rst index 7124b87..9336afa 100644 --- a/tests/scenario_sale_opportunity_management.rst +++ b/tests/scenario_sale_opportunity_management.rst @@ -19,4 +19,20 @@ Crear prospecto:: >>> Prospect = Model.get('sale.prospect') >>> prospect = Prospect() >>> prospect.name = 'guchito S.A.S' - >>> prospect.save() \ No newline at end of file + >>> prospect.tel = 3123423422 + >>> prospect.save() + + +----------------------------------------------------------------------------------------- +Como operador quiero poder crear un seguimiento de prospecto para luego hacer una llamada +----------------------------------------------------------------------------------------- + +Crear seguimiento de prospecto:: + >>> ProspectTrace = Model.get('sale.prospect_trace') + >>> prospect_trace = ProspectTrace() + >>> prospect_trace.prospect = prospect + + >>> prospect_trace.prospect_name + 'guchito S.A.S' + >>> prospect_trace.prospect_tel + 3123423422 \ No newline at end of file -- 2.45.2 From d1def24dd63ec1d51574312a403c3441835f5c19 Mon Sep 17 00:00:00 2001 From: camilogs Date: Fri, 28 Jul 2023 03:00:30 +0000 Subject: [PATCH 05/17] Se crea modelo de llamada y se hace valida fecha por defecto = hoy --- __init__.py | 2 ++ call.py | 13 +++++++++++++ tests/scenario_sale_opportunity_management.rst | 14 +++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 call.py diff --git a/__init__.py b/__init__.py index 387eb22..0563194 100644 --- a/__init__.py +++ b/__init__.py @@ -1,12 +1,14 @@ from trytond.pool import Pool from . import prospect from . import prospect_trace +from . import call __all__ = ['register'] def register(): Pool.register( + call.Call, prospect.Prospect, prospect_trace.ProspectTrace, module='sale_opportunity_management', type_='model') diff --git a/call.py b/call.py new file mode 100644 index 0000000..d185354 --- /dev/null +++ b/call.py @@ -0,0 +1,13 @@ +from trytond.model import ModelSQL, ModelView, fields +from datetime import date + +class Call(ModelSQL, ModelView): + 'Llamada' + + __name__ = 'sale.call' + + date = fields.Date('Fecha', ) + + @classmethod + def default_date(cls): + return date.today() \ No newline at end of file diff --git a/tests/scenario_sale_opportunity_management.rst b/tests/scenario_sale_opportunity_management.rst index 9336afa..cd2cd2d 100644 --- a/tests/scenario_sale_opportunity_management.rst +++ b/tests/scenario_sale_opportunity_management.rst @@ -6,6 +6,7 @@ Imports:: >>> from proteus import Model, Wizard >>> from trytond.tests.tools import activate_modules + >>> from datetime import date Activate modules:: @@ -35,4 +36,15 @@ Crear seguimiento de prospecto:: >>> prospect_trace.prospect_name 'guchito S.A.S' >>> prospect_trace.prospect_tel - 3123423422 \ No newline at end of file + 3123423422 + +---------------------------------------------------------------------------- +Como operador quiero poder registrar una llamada para luego generar reportes +---------------------------------------------------------------------------- + +Crear llamada a un seguimiento de prospecto:: + >>> Call = Model.get('sale.call') + >>> call = Call() + + >>> call.date == date.today() + True -- 2.45.2 From 6985b5300f2d4283173c609684246c3a525bf15c Mon Sep 17 00:00:00 2001 From: camilogs Date: Fri, 28 Jul 2023 03:26:38 +0000 Subject: [PATCH 06/17] Se crean relaciones entre llamadas y seguimiento de prospecto --- call.py | 5 +++- prospect_trace.py | 7 +++-- .../scenario_sale_opportunity_management.rst | 28 +++++++++++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/call.py b/call.py index d185354..708fb94 100644 --- a/call.py +++ b/call.py @@ -6,7 +6,10 @@ class Call(ModelSQL, ModelView): __name__ = 'sale.call' - date = fields.Date('Fecha', ) + date = fields.Date('Date') + description = fields.Char('Description') + + prospect_trace = fields.Many2One('sale.prospect_trace', 'Prospect trace') @classmethod def default_date(cls): diff --git a/prospect_trace.py b/prospect_trace.py index a71de0d..d203c63 100644 --- a/prospect_trace.py +++ b/prospect_trace.py @@ -8,12 +8,13 @@ class ProspectTrace(ModelSQL, ModelView): __name__ = 'sale.prospect_trace' prospect = fields.Many2One('sale.prospect', 'Prospect') + prospect_name = fields.Char('Name') + prospect_tel = fields.Integer('Tel') + + calls = fields.One2Many('sale.call', 'prospect_trace', "Calls") @fields.depends('prospect') def on_change_prospect(self): if self.prospect: self.prospect_name = self.prospect.name self.prospect_tel = self.prospect.tel - - prospect_name = fields.Char('Name') - prospect_tel = fields.Integer('Tel') \ No newline at end of file diff --git a/tests/scenario_sale_opportunity_management.rst b/tests/scenario_sale_opportunity_management.rst index cd2cd2d..3e14a95 100644 --- a/tests/scenario_sale_opportunity_management.rst +++ b/tests/scenario_sale_opportunity_management.rst @@ -19,6 +19,7 @@ Como administrador quiero poder registrar un prospecto para lugo poder hacerle u Crear prospecto:: >>> Prospect = Model.get('sale.prospect') >>> prospect = Prospect() + >>> prospect.name = 'guchito S.A.S' >>> prospect.tel = 3123423422 >>> prospect.save() @@ -31,7 +32,9 @@ Como operador quiero poder crear un seguimiento de prospecto para luego hacer un Crear seguimiento de prospecto:: >>> ProspectTrace = Model.get('sale.prospect_trace') >>> prospect_trace = ProspectTrace() + >>> prospect_trace.prospect = prospect + >>> prospect_trace.save() >>> prospect_trace.prospect_name 'guchito S.A.S' @@ -46,5 +49,30 @@ Crear llamada a un seguimiento de prospecto:: >>> Call = Model.get('sale.call') >>> call = Call() + >>> call.description = 'Descripción u observaciones de la llamada' + >>> call.prospect_trace = prospect_trace + >>> call.save() + + >>> call.prospect_trace.prospect_name + 'guchito S.A.S' + >>> call.prospect_trace.prospect_tel + 3123423422 >>> call.date == date.today() True + +Crear otra llamada al mismo seguimiento de prospecto:: + >>> Call = Model.get('sale.call') + >>> call = Call() + + >>> call.description = 'Segunda llamada al mismo seguimiento' + >>> call.prospect_trace = prospect_trace + >>> call.save() + + >>> call.prospect_trace.prospect_name + 'guchito S.A.S' + >>> call.prospect_trace.prospect_tel + 3123423422 + >>> call.date == date.today() + True + >>> len(prospect_trace.calls) == 2 + True \ No newline at end of file -- 2.45.2 From 4c6db3959f72b8d026947447f8212127a18043ae Mon Sep 17 00:00:00 2001 From: camilogs Date: Fri, 28 Jul 2023 22:50:24 +0000 Subject: [PATCH 07/17] Refactor: rename models --- __init__.py | 4 +-- call.py | 2 +- prospect_trace.py | 8 ++++-- .../scenario_sale_opportunity_management.rst | 28 ++++++++++--------- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/__init__.py b/__init__.py index 0563194..f3fc54d 100644 --- a/__init__.py +++ b/__init__.py @@ -1,6 +1,6 @@ from trytond.pool import Pool from . import prospect -from . import prospect_trace +from . import prospect_tracker from . import call __all__ = ['register'] @@ -10,7 +10,7 @@ def register(): Pool.register( call.Call, prospect.Prospect, - prospect_trace.ProspectTrace, + prospect_tracker.ProspectTracker, module='sale_opportunity_management', type_='model') Pool.register( module='sale_opportunity_management', type_='wizard') diff --git a/call.py b/call.py index 708fb94..ea1dcb9 100644 --- a/call.py +++ b/call.py @@ -9,7 +9,7 @@ class Call(ModelSQL, ModelView): date = fields.Date('Date') description = fields.Char('Description') - prospect_trace = fields.Many2One('sale.prospect_trace', 'Prospect trace') + prospect_tracker = fields.Many2One('sale.prospect_tracker', 'Prospect trace') @classmethod def default_date(cls): diff --git a/prospect_trace.py b/prospect_trace.py index d203c63..95d5a68 100644 --- a/prospect_trace.py +++ b/prospect_trace.py @@ -2,19 +2,21 @@ # this repository contains the full copyright notices and license terms. from trytond.model import ModelSQL, ModelView, fields -class ProspectTrace(ModelSQL, ModelView): +class ProspectTracker(ModelSQL, ModelView): 'Seguimiento de un prospecto' - __name__ = 'sale.prospect_trace' + __name__ = 'sale.prospect_tracker' prospect = fields.Many2One('sale.prospect', 'Prospect') prospect_name = fields.Char('Name') prospect_tel = fields.Integer('Tel') + prospect_city = fields.Char('City') - calls = fields.One2Many('sale.call', 'prospect_trace', "Calls") + calls = fields.One2Many('sale.call', 'prospect_tracker', "Calls") @fields.depends('prospect') def on_change_prospect(self): if self.prospect: self.prospect_name = self.prospect.name self.prospect_tel = self.prospect.tel + self.prospect_city = self.prospect.city diff --git a/tests/scenario_sale_opportunity_management.rst b/tests/scenario_sale_opportunity_management.rst index 3e14a95..2759591 100644 --- a/tests/scenario_sale_opportunity_management.rst +++ b/tests/scenario_sale_opportunity_management.rst @@ -22,6 +22,7 @@ Crear prospecto:: >>> prospect.name = 'guchito S.A.S' >>> prospect.tel = 3123423422 + >>> prospect.city = 'Bogotá' >>> prospect.save() @@ -30,16 +31,17 @@ Como operador quiero poder crear un seguimiento de prospecto para luego hacer un ----------------------------------------------------------------------------------------- Crear seguimiento de prospecto:: - >>> ProspectTrace = Model.get('sale.prospect_trace') - >>> prospect_trace = ProspectTrace() + >>> ProspectTracker = Model.get('sale.prospect_tracker') + >>> prospect_tracker = ProspectTracker() - >>> prospect_trace.prospect = prospect - >>> prospect_trace.save() + >>> prospect_tracker.prospect = prospect + >>> prospect_tracker.save() - >>> prospect_trace.prospect_name + >>> prospect_tracker.prospect_name 'guchito S.A.S' - >>> prospect_trace.prospect_tel + >>> prospect_tracker.prospect_tel 3123423422 + >>> prospect_tracker.prospect_city ---------------------------------------------------------------------------- Como operador quiero poder registrar una llamada para luego generar reportes @@ -50,12 +52,12 @@ Crear llamada a un seguimiento de prospecto:: >>> call = Call() >>> call.description = 'Descripción u observaciones de la llamada' - >>> call.prospect_trace = prospect_trace + >>> call.prospect_tracker = prospect_tracker >>> call.save() - >>> call.prospect_trace.prospect_name + >>> call.prospect_tracker.prospect_name 'guchito S.A.S' - >>> call.prospect_trace.prospect_tel + >>> call.prospect_tracker.prospect_tel 3123423422 >>> call.date == date.today() True @@ -65,14 +67,14 @@ Crear otra llamada al mismo seguimiento de prospecto:: >>> call = Call() >>> call.description = 'Segunda llamada al mismo seguimiento' - >>> call.prospect_trace = prospect_trace + >>> call.prospect_tracker = prospect_tracker >>> call.save() - >>> call.prospect_trace.prospect_name + >>> call.prospect_tracker.prospect_name 'guchito S.A.S' - >>> call.prospect_trace.prospect_tel + >>> call.prospect_tracker.prospect_tel 3123423422 >>> call.date == date.today() True - >>> len(prospect_trace.calls) == 2 + >>> len(prospect_tracker.calls) == 2 True \ No newline at end of file -- 2.45.2 From 5bcfc87c376e9f82834e6085e2a1755d23c5918d Mon Sep 17 00:00:00 2001 From: camilogs Date: Sun, 30 Jul 2023 00:55:44 +0000 Subject: [PATCH 08/17] Feat(Vista principal): Se crea vista principal --- call.xml | 67 ++++++++++++++++++++++++++++++++++++++++++++++ tryton.cfg | 1 + view/call_form.xml | 13 +++++++++ view/call_tree.xml | 8 ++++++ 4 files changed, 89 insertions(+) create mode 100644 call.xml create mode 100644 view/call_form.xml create mode 100644 view/call_tree.xml diff --git a/call.xml b/call.xml new file mode 100644 index 0000000..8b99699 --- /dev/null +++ b/call.xml @@ -0,0 +1,67 @@ + + + + + + + + + Calls + + sale.call + + + + + sale.call + tree + + + call_tree + + + + sale.call + form + call_form + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tryton.cfg b/tryton.cfg index f6aeab7..826e9c0 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -3,3 +3,4 @@ version=6.8.0 depends: ir xml: + call.xml diff --git a/view/call_form.xml b/view/call_form.xml new file mode 100644 index 0000000..e458297 --- /dev/null +++ b/view/call_form.xml @@ -0,0 +1,13 @@ + + +
+