Skip to content
Extraits de code Groupes Projets
Valider 0ab3a35b rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[init] initialisation module Hervé

parent
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
.*
*.pyc
!.gitignore
Ce diff est replié.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import models
# © 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "CG SCOP - Suivi de le relation cooperative",
"summary": "Suivi de le relation cooperative",
"version": "12.0.1.0.1",
"development_status": "Beta",
"author": "Le Filament",
"license": "AGPL-3",
"application": False,
"depends": ['cgscop_partner','cgscop_timesheet'],
"data": [
"security/ir.model.access.csv",
"views/res_partner.xml",
"views/scop_followup_format.xml",
],
'installable': True,
'auto_install': False,
}
# © 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import res_partner
from . import partner_activity
from . import scop_followup_format
\ No newline at end of file
# © 2020 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import json
from odoo import fields, models, api, tools, exceptions
import datetime
class ScopPartnerActivity(models.Model):
_name = 'scop.partner.activity'
_description = 'Activité par partner'
_order = 'year desc'
_auto = False
# Vue
partner_id = fields.Many2one('res.partner', string='Coopérative', readonly=True )
year = fields.Char("Année", readonly=True)
amount_dev = fields.Integer("Développement (hrs)", readonly=True)
amount_acc = fields.Integer("Suivi (hrs)", readonly=True)
amount_rev = fields.Integer("Révision (hrs)", readonly=True)
amount_for = fields.Integer("Formation (hrs)", readonly=True)
# ------------------------------------------------------
# Construction de la requete
# ------------------------------------------------------
@api.model
def _select(self):
query = """
SELECT
row_number() OVER () as id,
wrk.partner_id as partner_id,
wrk.year::varchar(10) as year,
sum(wrk.amount_rev) as amount_rev,
sum(wrk.amount_dev) as amount_dev,
sum(wrk.amount_acc) as amount_acc,
sum(wrk.amount_for) as amount_for
from (
select
ac.partner_id as partner_id,
EXTRACT(YEAR FROM ac.date) as "year",
ac.unit_amount as amount_rev,
0 as amount_dev,
0 as amount_acc,
0 as amount_for
from
account_analytic_line as ac
left join project_project as pu on pu.id = ac.project_id
left join cgscop_timesheet_code as pn on pn.id = pu.cgscop_timesheet_code_id
where
pn.domain = 'R'
union all
select
ac.partner_id as partner_id,
EXTRACT(YEAR FROM ac.date) as "year",
0 as amount_rev,
ac.unit_amount as amount_dev,
0 as amount_acc,
0 as amount_for
from
account_analytic_line as ac
left join project_project as pu on pu.id = ac.project_id
left join cgscop_timesheet_code as pn on pn.id = pu.cgscop_timesheet_code_id
where
pn.domain = 'D'
union all
select
ac.partner_id as partner_id,
EXTRACT(YEAR FROM ac.date) as "year",
0 as amount_rev,
0 as amount_dev,
ac.unit_amount as amount_acc,
0 as amount_for
from
account_analytic_line as ac
left join project_project as pu on pu.id = ac.project_id
left join cgscop_timesheet_code as pn on pn.id = pu.cgscop_timesheet_code_id
where
pn.domain = 'A'
union all
select
ac.partner_id as partner_id,
EXTRACT(YEAR FROM ac.date) as "year",
0 as amount_rev,
0 as amount_dev,
0 as amount_acc,
ac.unit_amount as amount_for
from
account_analytic_line as ac
left join project_project as pu on pu.id = ac.project_id
left join cgscop_timesheet_code as pn on pn.id = pu.cgscop_timesheet_code_id
where
pn.domain = 'F'
) as wrk
group BY
wrk.partner_id,
wrk.year
"""
return query
def init(self):
tools.drop_view_if_exists(self.env.cr, self._table)
self.env.cr.execute("""CREATE or REPLACE VIEW %s as (
%s
)""" % (self._table, self._select()))
\ No newline at end of file
# © 2021 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, api
import datetime
class CgScopPartnerCrm(models.Model):
_inherit = "res.partner"
partner_activity_ids = fields.One2many(
comodel_name='scop.partner.activity',
inverse_name='partner_id',
string='Activité',
readonly=True)
followup_format_id = fields.Many2one(
'scop.followup.format',
string='Format de suivi',
on_delete='restrict')
followup_duree = fields.Integer("Durée thérorique du suivi annuel",
related='followup_format_id.duree',
store=False)
followup_current_year = fields.Integer("Durée du suivi année en cours",
compute='_compute_followup_current_year',
store=False)
# ------------------------------------------------------
# Champs calculés durée du suivi de l'année en cours
# ------------------------------------------------------
@api.multi
def _compute_followup_current_year(self):
for rec in self:
# bilan de l'activité de l'année en cours
wyear = str(datetime.datetime.today().year)
acts = rec.partner_activity_ids.filtered(
lambda i: i.year == wyear)
if len(acts)<=0:
rec.followup_current_year = 0
else:
rec.followup_current_year = acts[0].amount_acc
# © 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
class ScopFollowUpFormat(models.Model):
_name = "scop.followup.format"
_description = "Format du suivi"
_order = 'ur_id, name'
def _default_ur(self):
return self.env['res.company']._ur_default_get()
name = fields.Char('Format du suivi')
ur_id = fields.Many2one(
'union.regionale',
string='Union Régionale',
index=True,
on_delete='restrict',
default=_default_ur)
duree = fields.Integer("Durée du suivi")
\ No newline at end of file
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_scop_partner_activity,access_scop_partner_activity,model_scop_partner_activity,base.group_user,1,0,0,0
access_scop_followup_format,access_scop_followup_format,model_scop_followup_format,base.group_user,1,0,0,0
admin_scop_followup_format,admin_scop_followup_format,model_scop_followup_format,cgscop_partner.group_cg_administrator,1,1,1,1
admin_ur_scop_followup_format,admin_ur_scop_followup_format,model_scop_followup_format,cgscop_partner.group_ur_list_modif,1,1,1,1
\ No newline at end of file
static/description/icon.png

9,08 ko

<?xml version="1.0"?>
<!-- Copyright 2021 Le Filament
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<data>
<record model="ir.ui.view" id="view_partner_crm_form">
<field name="name">partner.crm.form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="cgscop_partner.scop_contact_view_form"/>
<field name="priority" eval="1"/>
<field name="arch" type="xml">
<page name='scop_contacts' position="after">
<page name='scop_crm' string="Suivi de la relation" attrs="{'invisible': ['|', ('is_cooperative', '!=', True), ('project_status', '!=', '6_suivi')]}">
<group col="3">
<field name="followup_format_id" options="{'no_open': True, 'no_create': True}" domain="[('ur_id', '=', ur_id)]" />
<field name="followup_duree" readonly="1"/>
</group>
<field name="partner_activity_ids" widget="one2many" >
<tree>
<field name="year" readonly="1" />
<field name="amount_dev" readonly="1" />
<field name="amount_acc" readonly="1" />
<field name="amount_rev" readonly="1" />
<field name="amount_for" readonly="1" />
</tree>
</field>
</page>
</page>
</field>
</record>
<!-- Ajout d'une vue liste pour les coop -->
<record id="scop_partner_crm_view_tree" model="ir.ui.view">
<field name="name">scop.partner.crm.view.tree</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<tree string="Cooperatives">
<field name="display_name" string="Raison Sociale"/>
<field name="member_number_int"/>
<field name="cooperative_form_id"/>
<field name="zip"/>
<field name="city"/>
<field name="followup_delegate_id"/>
<field name="followup_format_id"/>
<field name="followup_duree" string="Durée théo. suivi (hrs)"/>
<field name="followup_current_year" string="Suivi réalisé (hrs)"/>
<field name="ur_id"/>
</tree>
</field>
</record>
<!-- Ajout d'un regroupement pour les coop -->
<record id="scop_partner_crm_view_search" model="ir.ui.view">
<field name="name">scop.partner.crm.view.search</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="cgscop_partner.scop_partner_view_search"/>
<field name="arch" type="xml">
<filter name="group_country" position="after">
<filter name='group_followup_format' string='Format de suivi' domain="[]" context="{'group_by' :'followup_format_id'}"/>
</filter>
</field>
</record>
</data>
</odoo>
<?xml version="1.0"?>
<!-- Copyright 2019 Le Filament
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<data>
<!-- Followup Format -->
<record id="view_scop_followup_format_tree" model="ir.ui.view">
<field name="name">scop.followup.format.tree</field>
<field name="model">scop.followup.format</field>
<field name="arch" type="xml">
<tree string="Formats de suivi" editable="top">
<field name="name"/>
<field name="duree" />
<field name="ur_id" options="{'no_open': True, 'no_create': True}"/>
</tree>
</field>
</record>
<record id="action_view_scop_followup_format_tree" model="ir.actions.act_window">
<field name="name">Format de suivi</field>
<field name="res_model">scop.followup.format</field>
<field name="view_mode">tree</field>
<field name="domain">[('ur_id', '=', ur_id)]</field>
<field name="help">Display and manage the list of Follow up Formats.</field>
</record>
<!-- MENUS -->
<menuitem id="menu_scop_followup_format"
parent="contacts.res_partner_menu_config"
action="action_view_scop_followup_format_tree"
groups="cgscop_partner.group_cg_administrator,cgscop_partner.group_ur_list_modif"
sequence="10"/>
</data>
</odoo>
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