Skip to content

Commit

Permalink
auto invoice external subcontractor
Browse files Browse the repository at this point in the history
  • Loading branch information
bguillot committed Oct 3, 2024
1 parent 968a1a0 commit 3a3237e
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 13 deletions.
1 change: 1 addition & 0 deletions account_invoice_subcontractor/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
],
"data": [
"data/cron_data.xml",
"data/mail_data.xml",
"security/security.xml",
"security/ir.model.access.csv",
"views/hr_employee_view.xml",
Expand Down
25 changes: 25 additions & 0 deletions account_invoice_subcontractor/data/mail_data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">

<record id="external_subcontractor_invoice_email_template" model="mail.template">
<field name="name">External subcontractor invoice template</field>
<field name="email_from">{{ (object.user_id.email or '') }}</field>
<field name="subject">Nouvelle facture sous traitance Akretion</field>
<field name="partner_to">{{ object.partner_id.id }}</field>
<field name="model_id" ref="account.model_account_move" />
<field name="auto_delete" eval="False" />
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="report_template" ref="account.account_invoices" />
<field
name="body_html"
><![CDATA[
Une facture de sous traitance a été créée pour Akretion.
Vous trouverez ci-joint le montant.
Veuillez transmettre votre facture correspondante à l'adresse '[email protected]' afin que nous puissions la valider et la payer une fois le paiement client effectué.
Merci.
Cordialement,
]]></field>
</record>

</odoo>
1 change: 1 addition & 0 deletions account_invoice_subcontractor/models/hr_employee.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ def _get_subcontractor_type(self):
required=True,
default="internal",
)
auto_generate_invoice = fields.Boolean(string="Création facture automatique")

def _get_employee_invoice_partner(self):
self.ensure_one()
Expand Down
40 changes: 27 additions & 13 deletions account_invoice_subcontractor/models/subcontractor_work.py
Original file line number Diff line number Diff line change
Expand Up @@ -385,39 +385,53 @@ def _scheduler_action_subcontractor_invoice_create(self, days=7):
date_filter = date.today() - timedelta(days=days)
subcontractors = self.env["hr.employee"].search(
[
"|",
"&",
("subcontractor_type", "=", "internal"),
("subcontractor_company_id", "!=", False),
]
"&",
("subcontractor_type", "=", "external"),
("auto_generate_invoice", "=", True),
],
order="subcontractor_type",
)
# Need to search on all subcontractor work
# because of the filter on date invoice
all_works = self.search(
[
("invoice_id.invoice_date", "<=", date_filter),
("subcontractor_invoice_line_id", "=", False),
"|",
("subcontractor_type", "=", "internal"),
"&",
("subcontractor_type", "=", "external"),
("auto_generate_invoice", "=", True),
("state", "in", ["posted", "paid"]),
],
)
for subcontractor in subcontractors:
dest_company = subcontractor.subcontractor_company_id
user = subcontractor.user_id
subcontractor_works = (
self.with_user(user)
.with_company(dest_company)
.search(
[
("id", "in", all_works.ids),
("employee_id", "=", subcontractor.id),
],
)
if subcontractor.subcontractor_type == "internal":
dest_company = subcontractor.subcontractor_company_id
user = subcontractor.user_id
self = self.with_user(user).with_company(dest_company)
subcontractor_works = self.search(
[
("id", "in", all_works.ids),
("employee_id", "=", subcontractor.id),
],
)
sub_ids = subcontractor_works.ids
sub_name = subcontractor.name
_logger.info(f"{sub_ids} lines found for subcontractor {sub_name}")
invoices = subcontractor_works.invoice_from_work()
for invoice in invoices:
invoice.action_post()
if subcontractor.subcontractor_type == "internal":
invoice.action_post()
else:
template = self.env.ref(
"account_invoice_subcontractor.external_subcontractor_invoice_email_template"
)
template.send_mail(invoice.id)
# if old_company:
# user.company_id = old_company.id
return True
Expand Down
4 changes: 4 additions & 0 deletions account_invoice_subcontractor/views/hr_employee_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
name="subcontractor_company_id"
attrs="{'required': [('subcontractor_type', '=', 'internal'), ('active', '=', True)], 'invisible': [('subcontractor_type','!=', 'internal')]}"
/>
<field
name="auto_generate_invoice"
attrs="{'invisible': [('subcontractor_type','!=', 'external')]}"
/>
</group>
</xpath>
</field>
Expand Down

0 comments on commit 3a3237e

Please sign in to comment.