diff --git a/__init__.py b/__init__.py
index d548d15f3ac4eb2d20bc8b7882455236d4fe3a89..83a8b401fff61f6ea7d9b9b5a260d6025e3bd7bf 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 f846dcefd6cc09ef6d78b7562e39a010e11e847b..c3905e2772a1b82357385549512e77fbd40e6fb2 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 bf52ecf5312fdb04e8afcac333a80dbaf101be9a..52f7c5c9b28848faae7f0a01bcdd32f8a83eff8b 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 0000000000000000000000000000000000000000..c74e9ff3987c9241da4c180b20abfda86b3fcd4b
--- /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 7a49fc23af864afd8b40550d71b73a06c7edeb64..5c40a1f69b31c6ab67260d93c516b4863fd4c7ac 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 1c01c6935fdbc5e615e7b0ba55cfa4f3c6bbb448..b6d3d5c9de90141e30d9de1c19189c039bbe82e7 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 0000000000000000000000000000000000000000..3d9173dff046caf52e45a63d3d727bc1ba010ac3
--- /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 0000000000000000000000000000000000000000..49965d27a69929baa845f44a5bd886d016ca84de
--- /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 11b74f16f3bf7d0ee3b492978f617a2f9837c19f..564826c8ba40e56592337777a522cbef6ce2baac 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 0000000000000000000000000000000000000000..91dfca524aed2f875310317c003eb6bfbacf4cba
--- /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
Binary files /dev/null and b/wizard/__pycache__/__init__.cpython-37.pyc differ
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
Binary files /dev/null and b/wizard/__pycache__/sale_make_invoice_advance.cpython-37.pyc differ
diff --git a/wizard/sale_make_invoice_advance.py b/wizard/sale_make_invoice_advance.py
new file mode 100644
index 0000000000000000000000000000000000000000..acf6251c93adf49dd26f94ddfdfadef2a14c5cbe
--- /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
+    # ------------------------------------------------------