diff --git a/data/cgscop_form_coop_mail_demande.xml b/data/cgscop_form_coop_mail_demande.xml index 40608c1e71cd63a9f8c8d6f325023a07ff731de6..5c5b147af12c9b5e9e6bec47bfb970fa8acda3a9 100644 --- a/data/cgscop_form_coop_mail_demande.xml +++ b/data/cgscop_form_coop_mail_demande.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?> <odoo> - <data noupdate="1"> + <data noupdate="0"> <!-- Template and notification section --> @@ -9,14 +9,14 @@ <field name="model_id" ref="model_cgscop_form_coop_demande" /> <field name="email_from">formation@scop.coop</field> <field name="email_to">${object.get_recipients()}</field> - <field name="subject">Form.Coop : Demande de financement incomplète</field> + <field name="subject">Form.Coop ${object.number} : Demande de financement incomplète </field> <field name="body_html" type="html"> <div style="margin: 0px; padding: 0px;"> <p style="margin: 0px; padding: 0px; font-size: 13px;"> <p>Madame, Monsieur,</p> <p - >Nous accusons réception de votre demande de financement de formation sur le fond Form.coop.<br + >Nous accusons réception de votre demande de financement de formation numéro ${object.number} sur le fond Form.coop.<br /> Nous vous indiquons que votre dossier doit être complété par les pièces suivantes :</p> @@ -39,14 +39,14 @@ <field name="model_id" ref="model_cgscop_form_coop_demande" /> <field name="email_from">formation@scop.coop</field> <field name="email_to">${object.get_recipients()}</field> - <field name="subject">Form.Coop : Justificatifs incomplets</field> + <field name="subject">Form.Coop ${object.number} : Justificatifs incomplets</field> <field name="body_html" type="html"> <div style="margin: 0px; padding: 0px;"> <p style="margin: 0px; padding: 0px; font-size: 13px;"> <p>Madame, Monsieur,</p> <p - >Nous vous indiquons que pour procéder au règlement de la prise en charge Form.Coop votre dossier doit être complété par les justificatifs suivants :</p> + >Nous vous indiquons que pour procéder au règlement de la prise en charge Form.Coop votre dossier numéro ${object.number} doit être complété par les justificatifs suivants :</p> <p >Nous vous invitons à nous retourner ces documents dans les meilleurs délais.</p> @@ -67,14 +67,14 @@ <field name="model_id" ref="model_cgscop_form_coop_demande" /> <field name="email_from">formation@scop.coop</field> <field name="email_to">${object.get_recipients()}</field> - <field name="subject">Form.Coop : Demande de prise en charge refusée</field> + <field name="subject">Form.COOp ${object.number} : Demande de prise en charge refusée</field> <field name="body_html" type="html"> <div style="margin: 0px; padding: 0px;"> <p style="margin: 0px; padding: 0px; font-size: 13px;"> <p>Madame, Monsieur,</p> <p - >Nous avons le regret de vous informer que votre demande de prise en charge Form.Coop a été refusée pour les raisons suivantes :</p> + >Nous avons le regret de vous informer que votre demande de prise en charge Form.Coop numéro ${object.number} a été refusée pour les raisons suivantes :</p> <p>Très cordialement</p> </p> diff --git a/data/cgscop_form_coop_mail_demande_collective.xml b/data/cgscop_form_coop_mail_demande_collective.xml index 532978c53c6b47c0635863e303a76e08b84553ba..7f6dce8ed8a97e325ff8c652350fe89b8f53fefe 100644 --- a/data/cgscop_form_coop_mail_demande_collective.xml +++ b/data/cgscop_form_coop_mail_demande_collective.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?> <odoo> - <data noupdate="1"> + <data noupdate="0"> <!-- Template and notification section --> <record model="mail.template" id="email_template_fc_incomplet_collective"> @@ -8,14 +8,14 @@ <field name="model_id" ref="model_cgscop_form_coop_demande_collective" /> <field name="email_from">formation@scop.coop</field> <field name="email_to">${object.get_recipients()}</field> - <field name="subject">Form.Coop : Demande de financement incomplète</field> + <field name="subject">Form.Coop ${object.number} : Demande de financement incomplète</field> <field name="body_html" type="html"> <div style="margin: 0px; padding: 0px;"> <p style="margin: 0px; padding: 0px; font-size: 13px;"> <p>Madame, Monsieur,</p> <p - >Nous accusons réception de votre demande de financement de formation sur le fond Form.coop.<br + >Nous accusons réception de votre demande de financement de formation numéro ${object.number} sur le fond Form.coop.<br /> Nous vous indiquons que votre dossier doit être complété par les pièces suivantes :</p> @@ -41,14 +41,14 @@ <field name="model_id" ref="model_cgscop_form_coop_demande_collective" /> <field name="email_from">formation@scop.coop</field> <field name="email_to">${object.get_recipients()}</field> - <field name="subject">Form.Coop : Justificatifs incomplets</field> + <field name="subject">Form.Coop ${object.number} : Justificatifs incomplets}</field> <field name="body_html" type="html"> <div style="margin: 0px; padding: 0px;"> <p style="margin: 0px; padding: 0px; font-size: 13px;"> <p>Madame, Monsieur,</p> <p - >Nous vous indiquons que pour procéder au règlement de la prise en charge Form.Coop votre dossier doit être complété par les justificatifs suivants :</p> + >Nous vous indiquons que pour procéder au règlement de la prise en charge Form.Coop votre dossier numéro ${object.number} doit être complété par les justificatifs suivants :</p> <p >Nous vous invitons à nous retourner ces documents dans les meilleurs délais.</p> @@ -69,14 +69,14 @@ <field name="model_id" ref="model_cgscop_form_coop_demande_collective" /> <field name="email_from">formation@scop.coop</field> <field name="email_to">${object.get_recipients()}</field> - <field name="subject">Form.Coop : Demande de prise en charge refusée</field> + <field name="subject">Form.Coop ${object.number} : Demande de prise en charge refusée</field> <field name="body_html" type="html"> <div style="margin: 0px; padding: 0px;"> <p style="margin: 0px; padding: 0px; font-size: 13px;"> <p>Madame, Monsieur,</p> <p - >Nous avons le regret de vous informer que votre demande de prise en charge Form.Coop a été refusée pour les raisons suivantes :</p> + >Nous avons le regret de vous informer que votre demande de prise en charge Form.Coop numéro ${object.number} a été refusée pour les raisons suivantes :</p> <p>Très cordialement</p> </p> diff --git a/models/cgscop_form_coop_contribution.py b/models/cgscop_form_coop_contribution.py index 5a6f66d503668b1b820dbc2ffd1c8ebe47fff45c..fa6bd1d00d600483de57754cf1789bcd380ae289 100644 --- a/models/cgscop_form_coop_contribution.py +++ b/models/cgscop_form_coop_contribution.py @@ -236,11 +236,11 @@ class CgscopFormCoopContribution(models.Model): dmds_confirmed = rec.demande_ids.filtered(lambda i: i.etat == "confirmed") rec.nb_demande_confirmed = len(dmds_confirmed) rec.montant_demande_confirmed = sum( - dmds_confirmed.mapped("montant_demande") + dmds_confirmed.mapped("formation_montant") ) # Demandes accepted - dmds_accepted = rec.demande_ids.filtered(lambda i: i.etat == "accepted") + dmds_accepted = rec.demande_ids.filtered(lambda i: i.etat in ["accepted","justified"]) rec.nb_demande_accepted = len(dmds_accepted) rec.montant_demande_accepted = sum(dmds_accepted.mapped("montant_accepted")) diff --git a/models/cgscop_form_coop_demande.py b/models/cgscop_form_coop_demande.py index a329c8336bab2de9a2483de495e2317bbd304cd6..9908561b29c7afb2ecdb188eacb10f3aeb660bff 100644 --- a/models/cgscop_form_coop_demande.py +++ b/models/cgscop_form_coop_demande.py @@ -35,8 +35,8 @@ class CgscopFormCoopDemande(models.Model): demande_type = fields.Selection( selection=[ ("I", "Individuelle"), - ("G", "Groupée"), - ("R", "Regroupée"), + ("G", "Individuelle UR"), + ("R", "Formation UR"), ], string="Type de la demande", ) @@ -72,7 +72,10 @@ class CgscopFormCoopDemande(models.Model): partner_id = fields.Many2one( comodel_name="res.partner", string="Organisme", - domain=_getPartnerDomain, + domain=[ + ("is_cooperative", "=", True), + ("membership_status", "=", "member"), + ], ondelete="cascade", ) ur_id = fields.Many2one( @@ -178,8 +181,6 @@ class CgscopFormCoopDemande(models.Model): montant_facture = fields.Monetary( string="Montant à régler TTC", currency_field="currency_id", - compute="_compute_montant_facture", - inverse="_inverse_montant_facture", store=True, ) montant_verse = fields.Monetary( @@ -194,7 +195,7 @@ class CgscopFormCoopDemande(models.Model): email_count = fields.Integer(string="Nombre de mails", compute="_compute_emails") demande_collective_id = fields.Many2one( comodel_name="cgscop_form_coop.demande_collective", - string="Demande regroupée", + string="No de demande UR", ondelete="cascade", ) @@ -262,29 +263,6 @@ class CgscopFormCoopDemande(models.Model): """ return self.contact_mail - @api.depends("formation_nb_stagiaire_reel") - def _compute_montant_facture(self): - """ - Récupère la valeur par défaut du montant de la formation - """ - for rec in self: - # Si l'on est sur une demande groupée il faut proratiser également - # le montant facturé en fonction du nb de stagiaire total réel - if rec.demande_type == "G": - rec.montant_facture = 0 - if (rec.demande_collective_id) and ( - rec.demande_collective_id.nb_stagiaire_reel > 0 - ): - rec.montant_facture = ( - rec.demande_collective_id.montant_facture - / rec.demande_collective_id.nb_stagiaire_reel - * rec.formation_nb_stagiaire_reel - ) - - def _inverse_montant_facture(self): - for rec in self: - return - @api.depends("formation_montant_unit", "formation_nb_stagiaire") def _compute_formation_montant(self): """ @@ -531,13 +509,13 @@ class CgscopFormCoopDemande(models.Model): def show_demande(self): # Détermine le filtre par défaut pour l'affichage - filtre = self.env.user.company_id.ur_id.partner_filter + filtre = self.env.company.ur_id.partner_filter mycontext = "{'search_default_my_ur': True,'default_demande_type' : 'I'}" if filtre != "2": mycontext = "{'default_demande_type' : 'I'}" return { - "name": "Demandes de financement", + "name": "Demandes individuelles", "type": "ir.actions.act_window", "res_model": "cgscop_form_coop.demande", "search_view_id": ( diff --git a/models/cgscop_form_coop_demande_collective.py b/models/cgscop_form_coop_demande_collective.py index 40c881bcf0ee8a49310085745ffc10fde571a127..6d8c3282b160865806e0d6f67dd21644df78f5a1 100644 --- a/models/cgscop_form_coop_demande_collective.py +++ b/models/cgscop_form_coop_demande_collective.py @@ -20,8 +20,8 @@ class CgscopFormCoopDemandeCollective(models.Model): demande_type = fields.Selection( selection=[ ("I", "Individuelle"), - ("G", "Groupée"), - ("R", "Regroupée"), + ("G", "Individuelle UR"), + ("R", "Formation UR"), ], string="Type de la demande", ) @@ -142,7 +142,8 @@ class CgscopFormCoopDemandeCollective(models.Model): string="Accord pour versement", tracking=1, store=True ) nb_stagiaire_reel = fields.Integer( - string="Nombre de stagiaires présents", compute="_compute_demandes" + string="Nombre de stagiaires présents", compute="_compute_demandes", + store=True ) montant_facture = fields.Monetary( string="Montant à régler TTC", @@ -421,13 +422,13 @@ class CgscopFormCoopDemandeCollective(models.Model): def show_demande(self): # Détermine le filtre par défaut pour l'affichage - filtre = self.env.user.company_id.ur_id.partner_filter + filtre = self.env.company.ur_id.partner_filter mycontext = "{'search_default_my_ur': True,'default_demande_type' : 'R'}" if filtre != "2": mycontext = "{'default_demande_type' : 'R'}" return { - "name": "Demandes regroupées de financement", + "name": "Formations dispensées URs", "type": "ir.actions.act_window", "res_model": "cgscop_form_coop.demande_collective", "search_view_id": ( diff --git a/models/cgscop_form_coop_fond.py b/models/cgscop_form_coop_fond.py index f8b3726bfb255ee254d358ebca6329956d43eafa..3ac67d35816738753ac183632187115fbfd9d3f9 100644 --- a/models/cgscop_form_coop_fond.py +++ b/models/cgscop_form_coop_fond.py @@ -163,7 +163,6 @@ class CgscopFormCoopFond(models.Model): for fd in self: # Demandes totales dmds = fd.demande_ids - fd.nb_demande = len(dmds) # Demandes créés dmds_created = fd.demande_ids.filtered(lambda i: i.etat == "created") @@ -173,10 +172,10 @@ class CgscopFormCoopFond(models.Model): # Demandes confirmed dmds_confirmed = fd.demande_ids.filtered(lambda i: i.etat == "confirmed") fd.nb_demande_confirmed = len(dmds_confirmed) - fd.montant_demande_confirmed = sum(dmds_confirmed.mapped("montant_demande")) + fd.montant_demande_confirmed = sum(dmds_confirmed.mapped("formation_montant")) # Demandes accepted - dmds_accepted = fd.demande_ids.filtered(lambda i: i.etat == "accepted") + dmds_accepted = fd.demande_ids.filtered(lambda i: i.etat in ["accepted","justified"]) fd.nb_demande_accepted = len(dmds_accepted) fd.montant_demande_accepted = sum(dmds_accepted.mapped("montant_accepted")) @@ -192,13 +191,17 @@ class CgscopFormCoopFond(models.Model): # Montant totaux fd.montant_demande = ( - fd.montant_demande_created - + fd.montant_demande_confirmed + fd.montant_demande_confirmed + fd.montant_demande_accepted - + fd.montant_demande_refused + fd.montant_demande_payed ) + fd.nb_demande = ( + fd.nb_demande_confirmed + + fd.nb_demande_accepted + + fd.nb_demande_payed + ) + fd.montant_engaged = fd.montant_demande_accepted + fd.montant_demande_payed def _compute_contributions(self): diff --git a/views/cgscop_form_coop_demande_collective_views.xml b/views/cgscop_form_coop_demande_collective_views.xml index 4768b004eaadb4170342178bbcb9c48f23a50077..2f5a80afd8f0b3de7a1b06e944fc87fb3816526e 100644 --- a/views/cgscop_form_coop_demande_collective_views.xml +++ b/views/cgscop_form_coop_demande_collective_views.xml @@ -122,7 +122,7 @@ role="alert" attrs="{'invisible':['|',('etat','not in',('created')),('nb_demande','=',0)]}" > - Avant de confirmer votre demande et de la transmettre à l'équipe Form.Coop, merci vérifier la présence des documents obligatoires suivants : Programme et Devis + Avant de confirmer votre demande et de la transmettre à l'équipe Form.Coop, merci vérifier la présence des documents obligatoires suivants : Programme et Devis ou convention </div> <div class="alert alert-success" @@ -136,7 +136,7 @@ role="alert" attrs="{'invisible': [('etat', '!=', 'accepted')]}" > - Avant de transmettre les justificatifs de règlement de votre demande, merci vérifier la présence des documents obligatoires suivants : Facture, Liste d'émargement, Synthèse des évaluations de la satisfaction des stagiaires. + Avant de transmettre les justificatifs de règlement de votre demande, merci vérifier la présence des documents obligatoires suivants : Facture libellée au nom de la CGSCOP, Liste d'émargement, Synthèse des évaluations de la satisfaction des stagiaires. </div> <group col="3"> <group string="Demande de prise en charge"> @@ -262,7 +262,7 @@ /> </group> <group - string="Versement" + string="Versement à l'union régionale" attrs="{'invisible': [('etat', 'not in', ('payed'))]}" > <field @@ -444,7 +444,7 @@ <!-- Actions --> <record model="ir.actions.act_window" id="cgscop_fc_demande_collective_act"> - <field name="name">Demandes de financement actions regroupées</field> + <field name="name">Formations dispensées URs</field> <field name="res_model">cgscop_form_coop.demande_collective</field> <field name="view_mode">tree,form</field> <field name="search_view_id" ref="cgscop_fc_demande_collective_search" /> @@ -456,10 +456,11 @@ (0, 0, {'view_mode': 'form', 'view_id': ref('cgscop_fc_demande_collective_form')})]" /> </record> + <record model="ir.actions.server" id="cgscop_fc_demande_collective_act_server"> <field name="name" - >CG Scop - Form.coop filtre demande collectivepar défaut</field> + >CG Scop - Form.coop filtre demande collective par défaut</field> <field name="model_id" ref="cgscop_form_coop.model_cgscop_form_coop_demande_collective" diff --git a/views/cgscop_form_coop_demande_views.xml b/views/cgscop_form_coop_demande_views.xml index 8a1a563c21e081146a07725bbb4b30bae1a8b0f0..c63a38e513e8f1a1687f88366e1af23c546db6ed 100644 --- a/views/cgscop_form_coop_demande_views.xml +++ b/views/cgscop_form_coop_demande_views.xml @@ -9,6 +9,7 @@ <field name="currency_id" invisible="1" /> <field name="number" /> <field name="demande_type" /> + <field name="demande_collective_id" /> <field name="ur_id" /> <field name="fond_annee" /> <field name="etat" /> @@ -306,14 +307,19 @@ name="versement_ok" widget="boolean_toggle" required="1" - attrs="{'readonly': ['|',('demande_type', 'not in', ('I')),'&',('etat', 'not in', ('created')),('current_user_is_fc_admin', '=', False)],'invisible': ['|',('demande_type', 'not in', ('I')),('etat', 'not in', ('justified'))]}" + attrs="{'readonly': ['|',('demande_type', 'not in', ('I')),'&',('etat', 'not in', ('created')),('current_user_is_fc_admin', '=', False)],'invisible': ['|',('demande_type', 'not in', ('I','G')),('etat', 'not in', ('justified'))]}" + /> + <field + name="formation_nb_stagiaire_reel" + required="1" + attrs="{'readonly': ['|',('demande_type', 'not in', ('I')),'&',('etat', 'not in', ('created')),('current_user_is_fc_admin', '=', False)],'invisible': ['|',('demande_type', 'not in', ('I','G')),('etat', 'not in', ('justified'))]}" /> <field name="montant_facture" widget="monetary" options="{'currency_field': 'currency_id'}" required="1" - attrs="{'invisible': [('etat', 'not in', ('justified'))],'readonly': [('current_user_is_fc_admin', '=', False)]}" + attrs="{'readonly': ['|',('demande_type', 'not in', ('I')),'&',('etat', 'not in', ('created')),('current_user_is_fc_admin', '=', False)],'invisible': ['|',('demande_type', 'not in', ('I')),('etat', 'not in', ('justified'))]}" /> </group> <group @@ -426,7 +432,7 @@ <!-- Actions --> <record model="ir.actions.act_window" id="cgscop_fc_demande_act"> - <field name="name">Demandes de financement</field> + <field name="name">Demandes individuelles</field> <field name="res_model">cgscop_form_coop.demande</field> <field name="view_mode">tree,form</field> <field name="search_view_id" ref="cgscop_fc_demande_search" /> diff --git a/views/cgscop_form_coop_fond_views.xml b/views/cgscop_form_coop_fond_views.xml index 6765e161f5974d014619112ef78bea42ad8b2809..a3c539d2fc7ae3aebe0c07525ba209463e95c3f4 100644 --- a/views/cgscop_form_coop_fond_views.xml +++ b/views/cgscop_form_coop_fond_views.xml @@ -81,20 +81,13 @@ </group> <group string="Nombre de demandes"> - <field name="nb_demande_created" /> <field name="nb_demande_confirmed" /> <field name="nb_demande_accepted" /> <field name="nb_demande_payed" /> - <field name="nb_demande_refused" /> <br /> <field name="nb_demande" /> </group> <group string="Montant des demandes"> - <field - name="montant_demande_created" - widget="monetary" - options="{'currency_field': 'currency_id'}" - /> <field name="montant_demande_confirmed" widget="monetary" @@ -110,11 +103,6 @@ widget="monetary" options="{'currency_field': 'currency_id'}" /> - <field - name="montant_demande_refused" - widget="monetary" - options="{'currency_field': 'currency_id'}" - /> <br /> <field name="montant_demande" @@ -274,22 +262,11 @@ name="fond_view" class="btn btn-info" >Voir le fond</button> - <button - type="object" - name="demande_view" - class="btn btn-info" - >Voir les demandes</button> </div> </div> <div class="col-6"> <table class="table table-bordered"> <tbody> - <tr> - <td>Mt demandes créés</td> - <td><field - name="montant_demande_created" - /> €</td> - </tr> <tr> <td>Mt demandes confirmées</td> <td><field @@ -308,12 +285,6 @@ name="montant_demande_payed" /> €</td> </tr> - <tr> - <td>Mt demandes refusées</td> - <td><field - name="montant_demande_refused" - /> €</td> - </tr> </tbody> </table> </div> diff --git a/views/cgscop_form_coop_menu.xml b/views/cgscop_form_coop_menu.xml index 4d5872803749ed7ea6f93b45a1d62e393662d60d..da67b93c8a414d4a8292a7130be864c20bc3ee75 100644 --- a/views/cgscop_form_coop_menu.xml +++ b/views/cgscop_form_coop_menu.xml @@ -44,7 +44,7 @@ <menuitem id="cgscop_form_coop_menu_demande" parent="cgscop_form_coop_menu_root" - name="Demandes" + name="Demandes de financement" sequence="40" /> @@ -52,7 +52,7 @@ <menuitem id="cgscop_form_coop_menu_demande_indiv" parent="cgscop_form_coop_menu_demande" - name="Demandes individuelles" + name="Formations individuelles" sequence="10" action="cgscop_fc_demande_act_server" /> @@ -61,7 +61,7 @@ <menuitem id="cgscop_form_coop_menu_demande_collect" parent="cgscop_form_coop_menu_demande" - name="Demandes regroupées" + name="Formations dispensées par les URs" sequence="20" action="cgscop_fc_demande_collective_act_server" /> diff --git a/wizard/cgscop_form_coop_collective_versement_wizard.py b/wizard/cgscop_form_coop_collective_versement_wizard.py index b5b20a3ab8e3b41bcc8079c79e08c885360a21b4..b7164e10abbb65fc46b21f6cc978b31ff14587d2 100644 --- a/wizard/cgscop_form_coop_collective_versement_wizard.py +++ b/wizard/cgscop_form_coop_collective_versement_wizard.py @@ -22,6 +22,12 @@ class CgscopFormCoopCollectiveVersementWizard(models.TransientModel): .montant_facture ) + @api.model + def _default_nb_stagiaire_reel(self): + return self.env['cgscop_form_coop.demande_collective'].browse( + self.env.context.get('active_id')).nb_stagiaire_reel + + # Fields common demande_id = fields.Many2one( comodel_name="cgscop_form_coop.demande_collective", @@ -29,16 +35,16 @@ class CgscopFormCoopCollectiveVersementWizard(models.TransientModel): default=_default_demande_id, ) - montant_accepted = fields.Integer( - string="Montant accepté", default=_default_montant - ) - montant_verse = fields.Integer(string="Montant versé", default=_default_montant) date_versement = fields.Date( string="Date du versement", default=fields.Date.today() ) + nb_stagiaire_reel = fields.Integer( + string='Nombre de stagiaires', + default=_default_nb_stagiaire_reel) + # ------------------------------------------------------ # Contraintes # ------------------------------------------------------ @@ -56,7 +62,7 @@ class CgscopFormCoopCollectiveVersementWizard(models.TransientModel): ) # Puis on change l'état des demandes individuelles for dmds in self.demande_id.demande_ids: - wmt = dmds.montant_facture + wmt = self.montant_verse / self.nb_stagiaire_reel * dmds.formation_nb_stagiaire_reel dmds.write( { "etat": "payed",