Skip to content
Extraits de code Groupes Projets
Valider 07aee272 rédigé par Juliana's avatar Juliana
Parcourir les fichiers

Ajout factures liées bénéficiaire

parent 2db8ca27
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -2,10 +2,41 @@ ...@@ -2,10 +2,41 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models, fields, api from odoo import models, fields, api
from ast import literal_eval
class AutreResPartner(models.Model): class AutreResPartner(models.Model):
_inherit = "res.partner" _inherit = "res.partner"
@api.multi
def _invoice_total_benef(self):
account_invoice = self.env['account.invoice']
if not self.ids:
self.total_invoiced_benef = 0.0
return True
user_currency_id = self.env.user.company_id.currency_id.id
all_partner_ids = [self.id]
# generate where clause
where_query = account_invoice._where_calc([
('beneficiaire_id', 'in', all_partner_ids), ('state', 'not in', ['draft', 'cancel']),
('type', 'in', ('out_invoice', 'out_refund'))
])
account_invoice._apply_ir_rules(where_query, 'read')
from_clause, where_clause, where_clause_params = where_query.get_sql()
# price_total is in the company currency
query = """
SELECT SUM(amount_untaxed) as total, beneficiaire_id
FROM account_invoice account_invoice
WHERE %s
GROUP BY beneficiaire_id
""" % where_clause
self.env.cr.execute(query, where_clause_params)
price_totals = self.env.cr.dictfetchall()
self.total_invoiced_benef = sum(price['total'] for price in price_totals)
# Particulier # Particulier
beneficiaire = fields.Boolean(string="Est un bénéficiaire") beneficiaire = fields.Boolean(string="Est un bénéficiaire")
societe_id = fields.Many2one('res.partner', string='Société liée') societe_id = fields.Many2one('res.partner', string='Société liée')
...@@ -41,6 +72,21 @@ class AutreResPartner(models.Model): ...@@ -41,6 +72,21 @@ class AutreResPartner(models.Model):
preference_chorus = fields.Boolean('Chorus Pro') preference_chorus = fields.Boolean('Chorus Pro')
email_fact = fields.Char('Email de facturation') email_fact = fields.Char('Email de facturation')
ref_chorus = fields.Char('Références Chorus') ref_chorus = fields.Char('Références Chorus')
total_invoiced_benef = fields.Monetary(compute='_invoice_total_benef', string="Total Invoiced beneficiaire",
groups='account.group_account_invoice')
def _compute_sale_order_count(self):
super(AutreResPartner, self)._compute_sale_order_count()
sale_data = self.env['sale.order'].read_group(domain=[('beneficiaire_id', 'child_of', self.ids)],
fields=['beneficiaire_id'], groupby=['beneficiaire_id'])
mapped_data = dict([(m['beneficiaire_id'][0], m['beneficiaire_id_count']) for m in sale_data])
for partner in self:
# let's obtain the partner id and all its child ids
partner_ids = [partner.id] + partner.child_ids.ids
# then we can sum for all the partner's child
sale_order_count_benef = sum(mapped_data.get(child, 0) for child in partner_ids)
partner.sale_order_count += sale_order_count_benef
@api.onchange('company_type') @api.onchange('company_type')
def onchange_company_type(self): def onchange_company_type(self):
...@@ -69,6 +115,14 @@ class AutreResPartner(models.Model): ...@@ -69,6 +115,14 @@ class AutreResPartner(models.Model):
self.financement = False self.financement = False
self.societe_id = False self.societe_id = False
@api.multi
def action_view_partner_invoices_benef(self):
self.ensure_one()
action = self.env.ref('account.action_invoice_refund_out_tree').read()[0]
action['domain'] = literal_eval(action['domain'])
action['domain'].append(('beneficiaire_id', 'child_of', self.id))
return action
class AutrementStatut(models.Model): class AutrementStatut(models.Model):
_description = 'Partner Statut' _description = 'Partner Statut'
_name = 'res.partner.statut' _name = 'res.partner.statut'
......
...@@ -17,5 +17,16 @@ ...@@ -17,5 +17,16 @@
</field> </field>
</record> </record>
<record id="autrement_invoice_tree" model="ir.ui.view">
<field name="name">autrement.account.invoice.tree</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="after">
<field name="beneficiaire_id" />
</xpath>
</field>
</record>
</data> </data>
</odoo> </odoo>
\ No newline at end of file
...@@ -276,5 +276,51 @@ ...@@ -276,5 +276,51 @@
</field> </field>
</record> </record>
<record model="ir.ui.view" id="autrment_partner_view_buttons_ab">
<field name="name">autrement.partner.view.buttons</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="priority" eval="20"/>
<field name="groups_id" eval="[(4, ref('account.group_account_invoice'))]"/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button type="object" class="oe_stat_button" icon="fa-pencil-square-o" name="action_view_partner_invoices_benef"
attrs="{'invisible': [('customer', '=', False)]}" context="{'default_beneficiaire_id': active_id}">
<div class="o_form_field o_stat_info">
<span class="o_stat_value">
<field name="total_invoiced_benef" widget='monetary' options="{'currency_field': 'currency_id'}"/>
</span>
<span class="o_stat_text">Facturé bénéficiaire</span>
</div>
</button>
</div>
</field>
</record>
<record id="sale.act_res_partner_2_sale_order" model="ir.actions.act_window">
<field name="name">Quotations and Sales</field>
<field name="res_model">sale.order</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
<field name="context">{
'default_beneficiaire_id': active_id,
}</field>
<field name="groups_id" eval="[(4, ref('sales_team.group_sale_salesman'))]"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new quotation, the first step of a new sale!
</p><p>
Once the quotation is confirmed by the customer, it becomes a sales order.<br/> You will be able to create an invoice and collect the payment.
</p>
</field>
</record>
<!-- <record id="sale.act_res_partner_2_sale_order" model="ir.actions.act_window">
<field name="name">Quotations and Sales</field>
<field name="res_model">sale.order</field>
<field name="inherit_id" ref="sale.act_res_partner_2_sale_order"/>
<field name="context">{'search_default_beneficiaire_id': active_id}</field>
</record> -->
</data> </data>
</odoo> </odoo>
...@@ -14,6 +14,40 @@ ...@@ -14,6 +14,40 @@
</field> </field>
</record> </record>
<record id="autrement_view_sales_order_filter" model="ir.ui.view">
<field name="name">autrement.sale.order.list.select</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_sales_order_filter"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="after">
<field name="beneficiaire_id" operator="child_of" />
</xpath>
</field>
</record>
<record id="autrement_view_order_tree" model="ir.ui.view">
<field name="name">autrement.sale.order.tree</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="after">
<field name="beneficiaire_id" />
</xpath>
</field>
</record>
<record id="autrement_view_sales_order_filter" model="ir.ui.view">
<field name="name">autrement.sale.order.list.select</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_sales_order_filter"/>
<field name="priority" eval="15"/>
<field name="arch" type="xml">
<xpath expr="//filter[@name='my_sale_orders_filter']" position="before">
<filter string="Test" name="my_vente"
domain="['|',('parent_id','=',context.get('active_id',True)),('beneficiaire_id','=',context.get('active_id',True))]"/>
</xpath>
</field>
</record>
</data> </data>
</odoo> </odoo>
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter