From da74f3ffd2ed939d58f90bd4f6ebe71a60a6d91a Mon Sep 17 00:00:00 2001
From: Juliana <juliana@le-filament.com>
Date: Tue, 11 May 2021 12:09:26 +0200
Subject: [PATCH] Add info c&c on account + report account

---
 __init__.py                                   |   3 +-
 __manifest__.py                               |   4 +-
 models/__init__.py                            |   1 +
 models/account_invoice.py                     |  48 +++++++++++++++++
 models/sale_order.py                          |  16 +++++-
 models/vracoop_point_retrait.py               |  20 ++++---
 report/account_invoice_template.xml           |  15 ++++++
 views/account_invoice_views.xml               |  22 ++++++++
 views/vracoop_retrait_views.xml               |   1 +
 wizard/__init__.py                            |   4 ++
 wizard/__pycache__/__init__.cpython-37.pyc    | Bin 0 -> 223 bytes
 .../sale_make_invoice_advance.cpython-37.pyc  | Bin 0 -> 899 bytes
 wizard/sale_make_invoice_advance.py           |  50 ++++++++++++++++++
 13 files changed, 169 insertions(+), 15 deletions(-)
 create mode 100644 models/account_invoice.py
 create mode 100644 report/account_invoice_template.xml
 create mode 100644 views/account_invoice_views.xml
 create mode 100644 wizard/__init__.py
 create mode 100644 wizard/__pycache__/__init__.cpython-37.pyc
 create mode 100644 wizard/__pycache__/sale_make_invoice_advance.cpython-37.pyc
 create mode 100644 wizard/sale_make_invoice_advance.py

diff --git a/__init__.py b/__init__.py
index d548d15..83a8b40 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,4 +1,5 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 
 from . import models
-from . import controllers
\ No newline at end of file
+from . import controllers
+from . import wizard
\ No newline at end of file
diff --git a/__manifest__.py b/__manifest__.py
index f846dce..c3905e2 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -19,6 +19,8 @@
         "views/vracoop_sale_retrait_views.xml",
         "views/vracoop_templates.xml",
         "views/sale_order.xml",
-        "views/delivery_views.xml"
+        "views/delivery_views.xml",
+        "views/account_invoice_views.xml",
+        "report/account_invoice_template.xml"
     ]
 }
diff --git a/models/__init__.py b/models/__init__.py
index bf52ecf..52f7c5c 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -5,4 +5,5 @@ from . import vracoop_point_retrait
 from . import vracoop_retrait_time
 from . import vracoop_retrait_suivi
 from . import sale_order
+from . import account_invoice
 from . import delivery
\ No newline at end of file
diff --git a/models/account_invoice.py b/models/account_invoice.py
new file mode 100644
index 0000000..c74e9ff
--- /dev/null
+++ b/models/account_invoice.py
@@ -0,0 +1,48 @@
+# Copyright 2021 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+from datetime import datetime
+
+
+class AccountInvoice(models.Model):
+    _inherit = 'account.invoice'
+
+    # ------------------------------------------------------
+    # Fields declaration
+    # ------------------------------------------------------
+    vracoop_point_retrait_id = fields.Many2one(
+        comodel_name='vracoop.point.retrait',
+        string="Point retrait")
+    day_retrait = fields.Date("Jour du retrait")
+    hour_retrait = fields.Float("Heure du retrait")
+    carrier_point_retrait = fields.Boolean(
+        string='Est un point retrait')
+
+    # ------------------------------------------------------
+    # SQL Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Default methods
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Onchange / Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD methods (ORM overrides)
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Business methods
+    # ------------------------------------------------------
diff --git a/models/sale_order.py b/models/sale_order.py
index 7a49fc2..5c40a1f 100644
--- a/models/sale_order.py
+++ b/models/sale_order.py
@@ -1,7 +1,7 @@
 # © 2019 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import models, fields
+from odoo import models, fields, api
 from datetime import datetime
 
 class SaleOrder(models.Model):
@@ -42,4 +42,16 @@ class SaleOrder(models.Model):
             'day_retrait': day_retrait,
             'vracoop_point_retrait_id': retrait.id})
         
-        return True
\ No newline at end of file
+        return True
+
+    @api.multi
+    def _prepare_invoice(self):
+        self.ensure_one()
+        res = super(SaleOrder, self)._prepare_invoice()
+        res.update({
+            'vracoop_point_retrait_id': self.vracoop_point_retrait_id.id,
+            'day_retrait': self.day_retrait,
+            'hour_retrait': self.hour_retrait,
+            'carrier_point_retrait': self.carrier_point_retrait
+        })
+        return res
\ No newline at end of file
diff --git a/models/vracoop_point_retrait.py b/models/vracoop_point_retrait.py
index 1c01c69..b6d3d5c 100644
--- a/models/vracoop_point_retrait.py
+++ b/models/vracoop_point_retrait.py
@@ -2,14 +2,8 @@
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
 from odoo import models, fields, api
-import pytz
-# import dateutil.rrule as rrule
-# from datetime import date
-from dateutil.relativedelta import *
-from dateutil.easter import *
-from dateutil.rrule import rrule, DAILY, MINUTELY, rruleset
-from dateutil.parser import *
-# from datetime import *
+from dateutil.rrule import rrule, DAILY, MINUTELY
+from dateutil.relativedelta import relativedelta
 from datetime import datetime, timedelta
 from pytz import timezone
 
@@ -67,6 +61,8 @@ class VracoopPointRetrait(models.Model):
         "Nombre de retrait max par tranche horaire")
     nb_day_available = fields.Integer(
         "Nombre de jours pour commande", default=7)
+    nb_hours_preparation = fields.Float(
+        "Nombre d'heures de préparation", default=0.0)
 
     @api.multi
     def slot_calculate(self):
@@ -103,10 +99,11 @@ class VracoopPointRetrait(models.Model):
             
             # Liste des jours où je peux récupérer la commande
             # en fonction nombre de jour dispo sur la fiche du point retrait
+            first_day = datetime.today() + relativedelta(hours=rec.nb_hours_preparation)
             list_week = list(rrule(
                 DAILY, 
                 count=count_day, 
-                dtstart=datetime.today()))
+                dtstart=first_day))
             
             for week in list_week:
                 # On exclut les jours où la journée 
@@ -172,7 +169,7 @@ class VracoopPointRetrait(models.Model):
                     # Heure disponible pour un retrait 
                     # en fonction du temps de préparation
                     today_hour_available = today_datetime + timedelta(
-                            hours=corresponding_line.preparation_time)
+                            hours=(corresponding_line.preparation_time + rec.nb_hours_preparation))
                     
                     # Boucle pour les créneaux du matin
                     for slot_elem in list_slot_per_day_morning:
@@ -194,7 +191,8 @@ class VracoopPointRetrait(models.Model):
                             last_slot = slot_elem_last.strftime("%H:%M")
                         
                         # Si le jour est égal à la date du jour
-                        if slot_elem.date() == today_datetime.date():
+                        day_first = today_datetime.date() + relativedelta(hours=rec.nb_hours_preparation)
+                        if slot_elem.date() == day_first:
                             if (slot_elem_last > last_morning_hour_week):
                                 if (today_hour_available > last_morning_hour_week):
                                     continue
diff --git a/report/account_invoice_template.xml b/report/account_invoice_template.xml
new file mode 100644
index 0000000..3d9173d
--- /dev/null
+++ b/report/account_invoice_template.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+    <data>
+        <template id="report_invoice_document" inherit_id="account.report_invoice_document">
+            <p t-if="o.reference" position="before">
+                <p t-if="o.vracoop_point_retrait_id">
+                    Point de retrait: <span t-field="o.vracoop_point_retrait_id"/><br/>
+                    Jour de retrait: <span t-field="o.day_retrait"/><br/>
+                    Heure de retrait: <span t-field="o.hour_retrait" t-options= '{"widget": "float_time"}'/>
+                </p>
+            </p>
+        </template>
+
+    </data>
+</odoo>
diff --git a/views/account_invoice_views.xml b/views/account_invoice_views.xml
new file mode 100644
index 0000000..49965d2
--- /dev/null
+++ b/views/account_invoice_views.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+    <data>
+
+        <record id="invoice_form" model="ir.ui.view">
+            <field name="name">account.invoice.form.view.with_retrait</field>
+            <field name="model">account.invoice</field>
+            <field name="inherit_id" ref="account.invoice_form"/>
+            <field name="arch" type="xml">
+                <data>
+                  <field name="payment_term_id" position="after">
+                      <field name="carrier_point_retrait" invisible="1"/>
+                      <field name="vracoop_point_retrait_id" attrs="{'invisible': [('carrier_point_retrait', '=', False)]}"/>
+                      <field name="day_retrait" attrs="{'invisible': [('carrier_point_retrait', '=', False)]}" />
+                      <field name="hour_retrait" widget="float_time" attrs="{'invisible': [('carrier_point_retrait', '=', False)]}"/>
+                  </field>>
+                </data>
+            </field>
+        </record>
+
+    </data>
+</odoo>
\ No newline at end of file
diff --git a/views/vracoop_retrait_views.xml b/views/vracoop_retrait_views.xml
index 11b74f1..564826c 100644
--- a/views/vracoop_retrait_views.xml
+++ b/views/vracoop_retrait_views.xml
@@ -98,6 +98,7 @@
                             <group>
                                 <field name="nb_max_retrait"/>
                                 <field name="nb_day_available"/>
+                                <field name="nb_hours_preparation"/>
                             </group>
                         </group>
                         <notebook>
diff --git a/wizard/__init__.py b/wizard/__init__.py
new file mode 100644
index 0000000..91dfca5
--- /dev/null
+++ b/wizard/__init__.py
@@ -0,0 +1,4 @@
+# Copyright 2020 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from . import sale_make_invoice_advance
diff --git a/wizard/__pycache__/__init__.cpython-37.pyc b/wizard/__pycache__/__init__.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..f711a543533a940ce57d39e5f85d14c7cf8411eb
GIT binary patch
literal 223
zcmZ?b<>g{vU|^6gElpU(z`*br#DQTZ1_lNP1_p*=0R{$!6owSW9EM!RC`Lwx6sBMX
zP3D)33=9mKjJG6<6LV7Ia}%>u<1_Qh@-vfD;}cWL67!N%{WO_wF%*G}S;<hu!oUC_
zeue3W7N-^!>t_|@m!{;G>gT8A=Yt7DBmLyk;*$Ja{j#FO<ox^s7#*LSlbM_ypO}{t
upPZkQlbT$jU!GZ&Sd^k4AD@|*SrQ+wS5SG2!zMRBr8Fni4rJA5kS_q7jy==>

literal 0
HcmV?d00001

diff --git a/wizard/__pycache__/sale_make_invoice_advance.cpython-37.pyc b/wizard/__pycache__/sale_make_invoice_advance.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d79faca6d487bd6f7280fadc468dc3cc2c30a485
GIT binary patch
literal 899
zcmZ?b<>g{vU|?V=EKSH|XJB{?;=nKq0|SEt0|P^`9s>hI3PTEG4nr<u6k{$^6jLs9
z6mu?16bmDRJ3|Un3UdoX3UexR7Hcze6k7^QFoP!ROOPp=EVq~w3o>u9rDdk(q!iy`
z%gs+o%_+Xc7@rK1hGCFJAa=1D0|P@ULlk2QLljdAV-#~LOBQQ8LmDI43XW#RD7JP6
z7KSMHU<OT=TcW{<IjN2*Wr=yosR4<Vxv6<2o_S?e62*x*sd|YJalHbFgkEM|Su)HT
zRt5$Jb_NCpW{}^^7#J8z7)lsx7@C<DFx4>DFx4<GWUghYVOhXj!<faA#ahFd#a6?Z
z#a_dh#gW1|hh-rnBSQ_yk4%1=EVm@eiV~Ca^9$k&@-y>F;)_yCiV`zR;xkijai=6!
z!uYp%GV)7{;5^af#G<0i)FM<(nw+;-i%Sbqi;CD77#MEx$0rx1CYGeeXXcgVXC|lK
zVl6MqEJ-Z_IsFz>W=atU0|P@5Cx`&Wp(g7smg3Z$v|FtCMJcI8x7dsG<8w0eQg5*(
z=H{2?mE2;^%q!Dmyu}$GpPZ9eTpS<2lHpgnerR!OQL%njL4IjUeyM(bN`5|=Ff`In
zE-fy}&((+e4@So)=VT^l$0z2c#3$$H<fJB-=$B_!B^IUVgTg&NH!&OT;COf>R2K0t
zFfj0e!W%>|Fo`g-FtRbSFtRZ6Fjc8yjYvH-?`v}0;)svWOUzA;kH5tgAD^3_Qknx|
z^Tfv&mL}#vWjNw9^D<J4GE0h>K!M1bTbfgn3AX+gFVyGBsX00E@kOGbkOL8#j71_K
zwit*21wANWi$SS{gOP<592tI^?6+7zfde+R2$XV)KnjXLY3UYUNKs;5ab{{>i7zO9
agLNQ`hp<3~-{P==xY`b+tr+A$31$GKr1ir9

literal 0
HcmV?d00001

diff --git a/wizard/sale_make_invoice_advance.py b/wizard/sale_make_invoice_advance.py
new file mode 100644
index 0000000..acf6251
--- /dev/null
+++ b/wizard/sale_make_invoice_advance.py
@@ -0,0 +1,50 @@
+# Copyright 2021 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+
+from odoo import api, fields, models, _
+
+
+class SaleAdvancePaymentInv(models.TransientModel):
+    _inherit = "sale.advance.payment.inv"
+
+    # ------------------------------------------------------
+    # Fields declaration
+    # ------------------------------------------------------
+    @api.multi
+    def _create_invoice(self, order, so_line, amount):
+        inv = super(SaleAdvancePaymentInv, self)._create_invoice(order, so_line, amount)
+        inv.write({
+            'vracoop_point_retrait_id': order.vracoop_point_retrait_id.id,
+            'day_retrait': order.day_retrait,
+            'hour_retrait': order.hour_retrait,
+            'carrier_point_retrait': order.carrier_point_retrait
+        })
+        return inv
+    # ------------------------------------------------------
+    # SQL Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Default methods
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Onchange / Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD methods (ORM overrides)
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Business methods
+    # ------------------------------------------------------
-- 
GitLab