From 57c938bb8d1067b00133fe77bc5c8d5b8686caab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20V=C3=A9zina?= Date: Tue, 17 Dec 2024 15:40:14 -0500 Subject: [PATCH] itch --- customer_itch_cycle/__manifest__.py | 10 +++- .../models/itch_cycle_product_partner.py | 55 ++++++++++++++++++- customer_itch_cycle/models/res_partner.py | 4 +- customer_itch_cycle/models/sale_order_line.py | 12 ++++ .../views/itch_cycle_product_partner_view.xml | 7 ++- 5 files changed, 81 insertions(+), 7 deletions(-) diff --git a/customer_itch_cycle/__manifest__.py b/customer_itch_cycle/__manifest__.py index 5c6d243..1f489f3 100644 --- a/customer_itch_cycle/__manifest__.py +++ b/customer_itch_cycle/__manifest__.py @@ -2,10 +2,16 @@ { 'name': 'Customer Itch Cycle Management', 'version': '1.0', - 'depends': ['base', 'sale'], - 'author': 'Your Name', + 'depends': [ + 'base', + 'sale_stock' + ], + 'author': 'Benoit Vézina', 'category': 'Sales Management', + 'summary': 'Manage customer itch cycles by product for proactive sales engagement.', + 'website': 'https://www.bemade.org', 'description': "Manage customer itch cycles by product for proactive sales engagement.", + 'license': 'AGPL-3', 'data': [ 'views/itch_cycle_product_partner_view.xml', 'views/res_partner_view.xml', diff --git a/customer_itch_cycle/models/itch_cycle_product_partner.py b/customer_itch_cycle/models/itch_cycle_product_partner.py index 7dae52b..d443659 100644 --- a/customer_itch_cycle/models/itch_cycle_product_partner.py +++ b/customer_itch_cycle/models/itch_cycle_product_partner.py @@ -56,12 +56,58 @@ class ItchCycleProductPartner(models.Model): store=True ) + manualy_set_cycle = fields.Integer( + string="Cycle moyen (jours) défini manuellement" + ) + + manualy_set_qty = fields.Float( + string="Quantité défini manuellement" + ) + next_expected_date = fields.Date( string="Prochaine vente prévue", compute="_compute_next_expected_date", store=True ) + manualy_set_next_date = fields.Date( + string="Prochaine vente prévue défini manuellement" + ) + + calc_next_date = fields.Date( + string="Prochaine vente prévue calculée", + compute="_compute_next_expected_date", + store=True + ) + + calc_average_cycle = fields.Integer( + string="Cycle moyen (jours) calculé", + compute="_compute_itch_cycle_duration", + store=True + ) + + calc_average_qty = fields.Float( + string="Quantité moyenne calculée", + compute="_compute_mean_quantity_ordered", + store=True + ) + + @api.depends('manualy_set_cycle','average_cycle') + def _compute_itch_cycle_duration(self): + for record in self: + if record.manualy_set_cycle: + record.calc_average_cycle = record.manualy_set_cycle + else: + record.calc_average_cycle = record.average_cycle + + @api.depends('manualy_set_qty','max_quantity_ordered') + def _compute_mean_quantity_ordered(self): + for record in self: + if record.manualy_set_qty: + record.calc_average_qty = record.manualy_set_qty + else: + record.calc_average_qty = record.max_quantity + prediction_status = fields.Selection( selection=[ ('on_time', 'À l’heure'), @@ -174,8 +220,8 @@ class ItchCycleProductPartner(models.Model): sale_order_lines = self.env['sale.order.line'].search([ ('order_id.state', 'in', ['sale', 'done']), # Commandes confirmées ou terminées ('qty_delivered', '>', 0), # Quantité livrée supérieure à 0 - ('product_id', '!=', False), # Exclure les lignes sans produit - ('order_id.partner_id', '=', 5024659), # un client pour test + ('product_id', '!=', False) # Exclure les lignes sans produit +# ('order_id.partner_id', '=', 5024659), # un client pour test ]) # Carte pour regrouper par couple (client, produit) @@ -227,22 +273,27 @@ class ItchCycleProductPartner(models.Model): }) return True + @api.depends('sale_order_line_ids') def _compute_quantity_total_ordered(self): for record in self: record.quantity_total_ordered = sum(record.sale_order_line_ids.mapped('product_uom_qty')) + @api.depends('sale_order_line_ids') def _compute_quantity_of_orders(self): for record in self: record.quantity_of_orders = len(record.sale_order_line_ids) + @api.depends('sale_order_line_ids') def _compute_min_quantity_ordered(self): for record in self: record.min_quantity_ordered = min(record.sale_order_line_ids.mapped('product_uom_qty')) + @api.depends('sale_order_line_ids') def _compute_max_quantity_ordered(self): for record in self: record.max_quantity_ordered = max(record.sale_order_line_ids.mapped('product_uom_qty')) + @api.depends('sale_order_line_ids') def _compute_mean_quantity_ordered(self): for record in self: record.mean_quantity_ordered = np.mean(record.sale_order_line_ids.mapped('product_uom_qty')) diff --git a/customer_itch_cycle/models/res_partner.py b/customer_itch_cycle/models/res_partner.py index e574881..a0e9f56 100644 --- a/customer_itch_cycle/models/res_partner.py +++ b/customer_itch_cycle/models/res_partner.py @@ -8,13 +8,13 @@ class ResPartner(models.Model): itch_cycle_product_ids = fields.One2many( comodel_name='itch.cycle.product.partner', inverse_name='partner_id', - string="Itch Cycles Produits" + string="Itch Cycles Products" ) reorder_cycle_product_ids = fields.One2many( comodel_name='itch.cycle.product.partner', inverse_name='partner_id', - string="Itch Cycles Produits", + string="Reorder Cycles Products", domain=[('quantity_of_orders', '>', 1)] ) diff --git a/customer_itch_cycle/models/sale_order_line.py b/customer_itch_cycle/models/sale_order_line.py index 55e3c22..04db55d 100644 --- a/customer_itch_cycle/models/sale_order_line.py +++ b/customer_itch_cycle/models/sale_order_line.py @@ -8,6 +8,18 @@ class SaleOrderLine(models.Model): string="Cycle Produit/Partenaire" ) + stock_move_ids = fields.One2many( + comodel_name='stock.move', + inverse_name='sale_line_id', + string="Mouvements de stock" + ) + + sale_date = fields.Datetime( + string="Date de vente", + related='order_id.date_order', + store=True + ) + @api.model_create_multi def create(self, vals_list): # Appeler le super pour créer les lignes diff --git a/customer_itch_cycle/views/itch_cycle_product_partner_view.xml b/customer_itch_cycle/views/itch_cycle_product_partner_view.xml index 7bb46c0..6696f36 100644 --- a/customer_itch_cycle/views/itch_cycle_product_partner_view.xml +++ b/customer_itch_cycle/views/itch_cycle_product_partner_view.xml @@ -29,6 +29,11 @@ + + + + + @@ -36,7 +41,6 @@ - @@ -52,6 +56,7 @@ +