diff --git a/__manifest__.py b/__manifest__.py index fa2f244435ac1a9354f48f45eebb10158d35a641..b4417e0154b3695e6655f661e0463f959462d2cc 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -10,6 +10,7 @@ "depends": [ "account", "cgscop_partner", + "cgscop_extranet", "cgscop_liste_ministere", ], "data": [ @@ -19,6 +20,11 @@ "datas/mail_data.xml", "datas/mail_message_subtype.xml", "datas/scop_adhesion_file_data.xml", + # wizard + "wizard/scop_adhesion_year_wizard.xml", + "wizard/scop_compulsory_fields_suivi_wizard.xml", + "wizard/scop_partner_staff_membership_wizard.xml", + "wizard/scop_submit_membership_wizard.xml", # views "views/assets.xml", "views/res_config_settings.xml", @@ -27,8 +33,5 @@ "views/scop_adhesion_file.xml", # report "report/report_scop_adhesion.xml", - # wizard - "wizard/scop_adhesion_year_wizard.xml", - "wizard/scop_compulsory_fields_suivi_wizard.xml", ], } diff --git a/models/res_partner.py b/models/res_partner.py index 5745659eda5c31fe05c072cb5a1728963e34e734..8660763b8cb336fa5c46dc0f719230937a6754e4 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -1,10 +1,8 @@ # © 2022 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from pytz import timezone - from odoo import _, api, fields, models -from odoo.exceptions import ValidationError +from odoo.exceptions import UserError, ValidationError class ScopPartner(models.Model): @@ -177,6 +175,33 @@ class ScopPartner(models.Model): "target": "new", } + def fill_membership_staff(self): + self.ensure_one() + staff_id = self.env["scop.partner.staff"].search([ + ("partner_id", "=", self.id), + ("type_entry", "=", "membership"), + ("effective_date", ">", fields.Date.subtract(fields.Date.today(), years=1)) + ], limit=1) + if not staff_id: + staff_id = staff_id.create({ + "partner_id": self.id, + "type_entry": "membership", + "effective_date": fields.Date.today(), + "staff_count": 0, + }) + + wizard = self.env["scop.partner.staff.membership.wizard"].create( + {"partner_id": self.id, "staff_id": staff_id.id} + ) + return { + "name": "Effectif à l'adhésion", + "type": "ir.actions.act_window", + "view_mode": "form", + "res_model": "scop.partner.staff.membership.wizard", + "res_id": wizard.id, + "target": "new", + } + # ------------------------------------------------------ # Business methods # ------------------------------------------------------ @@ -241,42 +266,6 @@ class ScopPartner(models.Model): liasse_adhesion.is_qualified = True return liasse_adhesion - def is_project_complete(self): - """ - Check if project is complete : check fields LM-LF and docs - :return: Logs of errors if needed - """ - self.ensure_one() - lm_adhesion = self.get_lm_adhesion() - - errors = str() - errors_complete_fields = self.check_compulsory_fields(lm_adhesion) - if errors_complete_fields: - errors += errors_complete_fields - errors_complete_docs = self.check_compulsory_docs() - if errors_complete_docs: - errors_str = str() - for error in errors_complete_docs: - errors_str += "<li>" + error + "</li>" - errors += ( - "<hr/><strong>Documents manquants :</strong><ul>" + errors_str + "</ul>" - ) - if errors: - local_tz = timezone("Europe/Paris") - utc_tz = timezone("UTC") - self.list_logs = ( - "<strong>" - + utc_tz.localize(fields.Datetime.now()) - .astimezone(local_tz) - .strftime("%d/%m/%Y - %-H:%M") - + "</strong> - Impossible de soumettre le dossier à la CG Scop" - + errors - ) - return False - else: - self.list_logs = False - return True - def check_compulsory_fields(self, lm): """ Vérification des champs de la liste ministère et de la liasse fiscale @@ -297,17 +286,6 @@ class ScopPartner(models.Model): ) return res - def check_compulsory_docs(self): - """ - Vérification de la présence des docs obligatoires - :return: - """ - errors = list() - if errors: - return errors - else: - return False - def create_num_adherent(self): """ Generate new num adherent with sequence @@ -383,7 +361,7 @@ class ScopPartner(models.Model): } ) - def create_invoice_adhesion(self, lm): + def create_invoice_adhesion(self): """ Crée une facture d'adhésion avec l'article et le journal configurés ‐ Moins de 11 salariés (ou effectif inconnu) : 80€ @@ -400,8 +378,11 @@ class ScopPartner(models.Model): _("Vous devez configurer un article et un journal d'adhésion !") ) else: - effectif = lm.eff_tt - amount_adhesion = self.get_amount_adhesion(effectif) + staff_line = self.staff_ids.filtered( + lambda s: s.type_entry == "membership").sorted( + key="effective_date", reverse=True) + staff_number = staff_line[0].staff_count if staff_line else 0 + amount_adhesion = self.get_amount_adhesion(staff_number) Invoice = self.env["account.move"] @@ -449,29 +430,45 @@ class ScopPartner(models.Model): # ------------------------------------------------------ # Override parent / Change of status # ------------------------------------------------------ + def scop_sumbit_cg(self): + """ + Ouvre le wizard et vérifie les effectifs + """ + wizard = self.env["scop.submit.membership.wizard"].create( + { + "partner_id": self.id, + "list_logs": self.list_logs, + } + ) + return { + "name": "Confirmation de l'adhésion", + "type": "ir.actions.act_window", + "view_mode": "form", + "res_model": "scop.submit.membership.wizard", + "res_id": wizard.id, + "target": "new", + } + def scop_send_to_cg(self): - """Hérite la fonction d'envoi de l'organisme à la CG - pour validation afin de : - - vérifier si le dossier d'adhésion est complet + """ + Modifie le statut de la coopérative pour transmission du dossier à la CG - positionner la date_transmission_cg avec la date du jour - affecter la coop à sa DIRECCTE - - mettre à jour les lignes d'effectifs sur la fiche coop @return : True """ - if self.is_project_complete(): - super(ScopPartner, self).scop_send_to_cg() - self.date_transmission_cg = fields.Date.today() - self.lm_adhesion_id.maj_effectif_coop() - self.lm_adhesion_id.status = "3_complet" - message = "Le dossier d'adhésion a été transmis à la CG Scop" + staff_line = self.staff_ids.filtered( + lambda s: s.type_entry == "membership").sorted( + key="effective_date", reverse=True + ) + if staff_line and staff_line[0].staff_count > 0: + self.update({ + "membership_status": "soumis_cg", + "date_transmission_cg": fields.Date.today(), + "list_logs": False, + }) + self.affectation_contact_ministere() else: - message = self.list_logs - return { - "type": "ir.actions.act_window.message", - "title": _("Transmission du dossier d'Adhésion"), - "is_html_message": True, - "message": _(message), - } + raise UserError(_("Les effectifs à l'adhésion ne sont pas renseignés.")) def scop_abandonne(self): """ @@ -483,42 +480,10 @@ class ScopPartner(models.Model): self.date_abort = fields.Date.today() return True - def scop_suivi_check_docs(self): - """ - Contrôle des document obligatoire en passage à statut Suivi - """ - errors = str() - errors_complete_docs = self.check_compulsory_docs() - if errors_complete_docs: - errors_str = str() - for error in errors_complete_docs: - errors_str += "<li>" + error + "</li>" - errors += ( - "<hr/><strong>Documents manquants :</strong><ul>" + errors_str + "</ul>" - ) - # Si des erreurs remplir les logs avec la liste des documents manquants - if errors: - local_tz = timezone("Europe/Paris") - utc_tz = timezone("UTC") - self.list_logs = ( - "<strong>" - + utc_tz.localize(fields.Datetime.now()) - .astimezone(local_tz) - .strftime("%d/%m/%Y - %-H:%M") - + "</strong> - Impossible de passer en statut Suivi" - + errors - ) - else: - self.list_logs = False - def scop_suivi_adhesion(self): """ - Passe la coop en statut suivi avec ou sans adhésion en fonction - du bouton cliqué + Shows validation wizard """ - # vérification des documents obligatoires - self.scop_suivi_check_docs() - wizard = self.env["scop.compulsory.fields.suivi.wizard"].create( { "partner_id": self.id, @@ -535,6 +500,10 @@ class ScopPartner(models.Model): "target": "new", } + def scop_valid_cg_button(self): + self.ensure_one() + self.scop_valid_cg() + def scop_valid_cg(self): """ Inherit function to : @@ -544,12 +513,11 @@ class ScopPartner(models.Model): - set liasse_fiscale_adhesion as qualified """ - if not self.lm_adhesion_id: - raise ValidationError( - _("Cette coopérative n'a pas de dossier d'inscription") - ) - - res = super(ScopPartner, self).scop_valid_cg() + # TODO: Supprimer ? + # if not self.lm_adhesion_id: + # raise ValidationError( + # _("Cette coopérative n'a pas de dossier d'inscription") + # ) # Create period adhésions with num adherent num_adherent = self.member_number_int or self.create_num_adherent() @@ -558,13 +526,19 @@ class ScopPartner(models.Model): # TODO : check pour fede CAE si coop is CAE ? # Create invoice adhésion - invoice = self.create_invoice_adhesion(self.lm_adhesion_id) + invoice = self.create_invoice_adhesion() self.invoice_adhesion_id = invoice + self.update({ + "membership_status": "member", + "extranet_update_company": True, + "extranet_service_access": True, + }) + # TODO: Supprimer ? # set liasse_fiscale_adhesion as qualified - self.lm_adhesion_id.scop_liasse_fiscale_id.write({"is_qualified": True}) + # self.lm_adhesion_id.scop_liasse_fiscale_id.write({"is_qualified": True}) - return res + return True class ResPartnerPrescriberCanal(models.Model): diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index b5dc77e4c9811328765060a95fb640f54cedee54..cd6ee420d00c7c2e0583bbf57708503ffa107ac4 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -7,3 +7,5 @@ access_scop_adhesion_file,access_scop_adhesion_file,model_scop_adhesion_file,bas admin_scop_adhesion_file,admin_scop_adhesion_file,model_scop_adhesion_file,cgscop_partner.group_cg_administrator,1,1,1,1 cg_access_compulsory_fields_suivi_wizard,cg_access_compulsory_fields_suivi_wizard,model_scop_compulsory_fields_suivi_wizard,base.group_user,1,1,1,0 cg_access_adhesion_year_wizard,cg_access_adhesion_year_wizard,model_scop_adhesion_year_wizard,cgscop_partner.group_cg_administrative,1,1,1,0 +access_scop_partner_staff_membership_wizard,access_scop_partner_staff_membership_wizard,model_scop_partner_staff_membership_wizard,base.group_user,1,1,1,1 +access_scop_submit_membership_wizard,access_scop_submit_membership_wizard,model_scop_submit_membership_wizard,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/views/res_partner.xml b/views/res_partner.xml index c623ab545d5a0a95d72408f2b17963018e452615..beb13874dd89496bea0b947657afb2b25eb7a5f1 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -32,49 +32,73 @@ </field> </record> + <!-- + Inherited Scop Partner Form + --> <record id="view_partner_cooperative_adhesion_form" model="ir.ui.view"> <field name="name">cooperative.adhesion.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"> + <!-- Boutons de validation --> + <xpath expr="//button[@name='scop_abandonne']" position="before"> + <button + string="Envoyer Dossier CG" + type="object" + name="scop_sumbit_cg" + class="btn-primary" + attrs="{'invisible': [('membership_status', '!=', 'adhesion')]}" + /> + <button + string="Dossier créé CG" + type="object" + name="scop_valid_cg_button" + class="btn-primary" + attrs="{'invisible': [('membership_status', '!=', 'soumis_cg')]}" + groups="cgscop_partner.group_cg_administrator" + /> + </xpath> + + <!-- Alert pour les données du process d'adhésion --> + <xpath expr="//group[@name='scop_general_infos']" position="before"> + <div + attrs="{'invisible': [('membership_status', '!=', 'adhesion')]}" + role="alert" + class="alert alert-warning" + >Il est nécessaire de renseigner <button class="btn btn-info btn-sm" name="fill_membership_staff" type="object">les effectifs</button> et <button class="btn btn-info btn-sm" name="">les données financières</button> pour valider l'adhésion. + </div> + </xpath> + + <!-- Alert warning pour Statuts et JO --> + <xpath expr="//field[@name='date_1st_sign']" position="after"> + <div + attrs="{'invisible': ['|', ('date_1st_sign', '=', False), ('project_status', '!=', '3_accompagnement')]}" + role="alert" + class="alert alert-warning" + colspan="2" + > + Charger les <strong>Statuts</strong> et <strong>la publication au JO</strong> dans l'onglet <i>Documents</i>. + </div> + </xpath> + <!-- Alert warning pour le KBis --> + <xpath expr="//field[@name='social_object']" position="before"> + <div + attrs="{'invisible': ['|', ('registration_date', '=', False), ('project_status', '!=', '3_accompagnement')]}" + role="alert" + class="alert alert-warning" + colspan="2" + > + Charger le <strong>KBIS</strong> dans l'onglet <i>Documents</i>. + </div> + </xpath> + <page name='scop_contacts' position="before"> + <!-- Processus de création --> <page - name="adhesion_processus1" - string="Processus d'Adhésion" + name="creation_process" + string="Processus de création" attrs="{'invisible': ['|', ('is_cooperative', '!=', True), ('project_status','=','4_suivi')]}" > - <header> - <button - string="Dossier d'adhésion" - type="object" - name="scop_lm_adhesion" - class="btn-info" - attrs="{'invisible': ['|', ('membership_status', '!=', 'adhesion'), ('cooperative_form_id', 'in', (%(cgscop_partner.form_scic)d, %(cgscop_partner.form_coop47)d))]}" - /> - <button - string="Dossier d'inscription" - type="object" - name="scop_lm_adhesion" - class="btn-info" - attrs="{'invisible': ['|', ('membership_status', '!=', 'adhesion'), ('cooperative_form_id', 'not in', (%(cgscop_partner.form_scic)d, %(cgscop_partner.form_coop47)d))]}" - /> - <button - string="Données financières" - type="object" - name="scop_liasse_adhesion" - class="btn-info" - attrs="{'invisible': [('membership_status', '!=', 'adhesion')]}" - /> - <button - string="Modifier l'année du dossier" - type="object" - name="scop_change_year_dossier" - class="btn-warning" - attrs="{'invisible': ['|', ('membership_status', '!=', 'adhesion'), ('lm_adhesion_id', '=', False)]}" - groups="cgscop_partner.group_cg_administrator" - /> - </header> <div class="alert alert-danger" role="alert" @@ -160,6 +184,44 @@ <field name="date_convention" /> <field name="amount_convention" widget="monetary" /> </group> + </group> + </page> + + <!-- Processus d'adhésion --> + <page + name="membership_process" + string="Processus d'adhésion" + attrs="{'invisible': ['|', '|', ('is_cooperative', '!=', True), ('project_status','!=','4_suivi'), ('membership_status', 'not in', ('adhesion', 'soumis_cg'))]}" + > + <header> + <button + string="Effectifs à l'adhésion" + type="object" + name="fill_membership_staff" + class="btn-info" + /> + <button + string="Données financières" + type="object" + name="scop_liasse_adhesion" + class="btn-info" + attrs="{'invisible': [('membership_status', '!=', 'adhesion')]}" + /> + </header> + <div + class="alert alert-danger" + role="alert" + attrs="{'invisible':['|', '|', ('write_date', '=', False), ('list_logs', '=', False), ('project_status', '!=', '3_accompagnement')]}" + > + <field + class="o_field_header" + name="list_logs" + readonly="1" + widget="html" + /> + </div> + <field name="project_invoicing_status_nb" invisible="1" /> + <group col="3"> <group string="Phase d'adhésion" attrs="{'invisible':[('project_status','in',('1_information','2_pre-diagnostic','3_accompagnement'))]}" @@ -174,10 +236,11 @@ </page> </page> + <!-- Onglet 2 processus création --> <page name='scop_staff' position="after"> <page - name="adhesion_processus2" - string="Processus d'Adhésion" + name="creation_process_tab" + string="Processus de création" attrs="{'invisible': ['|', ('is_cooperative', '!=', True), ('project_status','!=','4_suivi')]}" > <field name="project_invoicing_status_nb" invisible="1" /> @@ -246,14 +309,6 @@ <field name="date_convention" /> <field name="amount_convention" widget="monetary" /> </group> - <group - string="Phase d'adhésion" - attrs="{'invisible':[('project_status','in',('1_information','2_pre-diagnostic','3_accompagnement'))]}" - > - <field name="file_full" widget="boolean_toggle" /> - <field name="date_transmission_cg" /> - <field name="date_bureau_validation" /> - </group> </group> </page> </page> @@ -276,6 +331,7 @@ </xpath> </field> + <field name="priority" eval="1" /> </record> <record id="view_partner_prospect_adhesion_tree" model="ir.ui.view"> diff --git a/wizard/__init__.py b/wizard/__init__.py index 637e9b26ef8125d9925d2a78e66641b643f2bf49..ea110ec99199eb39f6870aab1f67419ea9ac13e8 100644 --- a/wizard/__init__.py +++ b/wizard/__init__.py @@ -3,3 +3,5 @@ from . import scop_adhesion_year_wizard from . import scop_compulsory_fields_suivi_wizard +from . import scop_partner_staff_membership_wizard +from . import scop_submit_membership_wizard diff --git a/wizard/scop_compulsory_fields_suivi_wizard.py b/wizard/scop_compulsory_fields_suivi_wizard.py index 39f86bbc2ccdcd56dc3c8be10b4b3936a489af63..7681e705babb91d495f9014f9c424671589257d6 100644 --- a/wizard/scop_compulsory_fields_suivi_wizard.py +++ b/wizard/scop_compulsory_fields_suivi_wizard.py @@ -24,6 +24,9 @@ class ScopCompulsoryFieldsSuiviWizard(models.TransientModel): closeout_month = fields.Selection( related="partner_id.closeout_month", readonly=False ) + is_registration_in_progress = fields.Boolean( + related="partner_id.is_registration_in_progress", readonly=False + ) naf_id = fields.Many2one(related="partner_id.naf_id", readonly=False) registration_date = fields.Date(related="partner_id.registration_date", readonly=False) siret = fields.Char(related="partner_id.siret", readonly=False) @@ -37,7 +40,7 @@ class ScopCompulsoryFieldsSuiviWizard(models.TransientModel): """ Passe la coop en statut "4_suivi" """ - self.partner_id.write({"project_status": "4_suivi"}) + self.partner_id.write({"project_status": "4_suivi", "list_logs": False}) form_id = self.partner_id.cooperative_form_id if self.with_adhesion: self.partner_id.write({"membership_status": "adhesion"}) diff --git a/wizard/scop_compulsory_fields_suivi_wizard.xml b/wizard/scop_compulsory_fields_suivi_wizard.xml index 16468da4c0eb85af9279da36f23f0688642b8708..5fa97b48b786e4611bf6fb32ad06a5cd72705805 100644 --- a/wizard/scop_compulsory_fields_suivi_wizard.xml +++ b/wizard/scop_compulsory_fields_suivi_wizard.xml @@ -9,9 +9,17 @@ id="scop_adhesion_compulsory_fields_suivi_wizard_form" > <field name="name">scop.adhesion.compulsory.fields.suivi.wizard.form</field> - <field name="model">scop.compulsory.fields.suivi.wizard</field> + <field name="model">scop.compulsory.fields.suivi.wizard</field> <field name="arch" type="xml"> <form string="Confirmer les champs obligatoires"> + <div + class="alert alert-warning" + role="alert" + > + <p> + Il es nécessaire de charger les <strong>statuts</strong><span attrs="{'invisible': [('is_registration_in_progress', '=', True)]}">, le <strong>KBIS</strong></span> et <strong>l'annonce de publication au JO</strong> dans l'onglet <i>Documents</i> de la coopérative pour valider sa création. + </p> + </div> <div class="alert alert-danger" role="alert" @@ -40,9 +48,20 @@ <field name="capital" required="1" /> <field name="first_closeout" required="1" /> <field name="closeout_month" required="1" /> - <field name="registration_date" /> - <field name="siret" /> - <field name="naf_id" options="{'no_create': 1, 'no_edit': 1}" /> + <field name="is_registration_in_progress" /> + <field + name="registration_date" + attrs="{'required': [('is_registration_in_progress', '!=', True)]}" + /> + <field + name="siret" + attrs="{'required': [('is_registration_in_progress', '!=', True)]}" + /> + <field + name="naf_id" + options="{'no_create': 1, 'no_edit': 1}" + attrs="{'required': [('is_registration_in_progress', '!=', True)]}" + /> <field name="with_adhesion" invisible="1" /> </group> <footer> diff --git a/wizard/scop_partner_staff_membership_wizard.py b/wizard/scop_partner_staff_membership_wizard.py new file mode 100644 index 0000000000000000000000000000000000000000..318539183c25f26e99ed1d6d0b8f83bdc731992f --- /dev/null +++ b/wizard/scop_partner_staff_membership_wizard.py @@ -0,0 +1,40 @@ +# © 2022 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 ScopPartnerStaffMembershipWizard(models.TransientModel): + _name = "scop.partner.staff.membership.wizard" + _description = "Wizard: création modification de l'effectif d'adhésion" + + # ------------------------------------------------------ + # Field declaration + # ------------------------------------------------------ + partner_id = fields.Many2one( + comodel_name="res.partner", required=True + ) + staff_id = fields.Many2one( + comodel_name="scop.partner.staff", required=True + ) + effective_date = fields.Date(related="staff_id.effective_date", readonly=False) + staff_count = fields.Integer(related="staff_id.staff_count", readonly=False) + staff_shareholder_count = fields.Integer( + related="staff_id.staff_shareholder_count", + readonly=False + ) + staff_shareholder_total = fields.Integer( + related="staff_id.staff_shareholder_total", + readonly=False + ) + staff_average = fields.Float(related="staff_id.staff_average", readonly=False) + comment = fields.Char(related="staff_id.comment", readonly=False) + + # ------------------------------------------------------ + # Actions / Buttons + # ------------------------------------------------------ + def save_data(self): + """ + Sauvegarder les données même avec erreurs + """ + return {"type": "ir.actions.act_window_close"} diff --git a/wizard/scop_partner_staff_membership_wizard.xml b/wizard/scop_partner_staff_membership_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..272995f249e17e638d7115683667608ca8702347 --- /dev/null +++ b/wizard/scop_partner_staff_membership_wizard.xml @@ -0,0 +1,61 @@ +<?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="scop_partner_staff_membership_wizard_form" + > + <field name="name">scop.partner.staff.membership.wizard.form</field> + <field name="model">scop.partner.staff.membership.wizard</field> + <field name="arch" type="xml"> + <form string="Effectifs à l'adhésion"> + <h5>Effectifs à l'adhésion</h5> + <hr/> + <group> + <group> + <field + name="partner_id" + readonly="1" + /> + <field + name="staff_id" + readonly="1" + invisible="1" + /> + <field name="effective_date" required="1" /> + </group> + <group> + <field name="staff_count" required="1" /> + <field name="staff_shareholder_count" required="1" /> + <field name="staff_shareholder_total" required="1" /> + <field name="staff_average" required="1" /> + </group> + </group> + <label for="comment" /> + <field name="comment" /> + <footer> + <button + name="save_data" + type="object" + string="Sauvegarder" + class="oe_highlight" + /> + <button special="cancel" string="Annuler" /> + </footer> + </form> + </field> + </record> + + <record id="scop_partner_staff_membership_wizard_action" model="ir.actions.act_window"> + <field name="name">Effectif à l'adhésion</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">scop.partner.staff.membership.wizard</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + + </data> +</odoo> diff --git a/wizard/scop_submit_membership_wizard.py b/wizard/scop_submit_membership_wizard.py new file mode 100644 index 0000000000000000000000000000000000000000..59a1b0d60167912aa578125fd0c57cef8c01549d --- /dev/null +++ b/wizard/scop_submit_membership_wizard.py @@ -0,0 +1,35 @@ +# © 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 odoo.exceptions import UserError + + +class ScopSubmitMembershipWizard(models.TransientModel): + _name = "scop.submit.membership.wizard" + _description = "Wizard: Confirmer les champs obligatoires l'adhésion" + + partner_id = fields.Many2one( + comodel_name="res.partner", string="Coop", required=True + ) + + ur_id = fields.Many2one(related="partner_id.ur_id", readonly=False) + + list_logs = fields.Text("Liste des erreurs") + + # ------------------------------------------------------ + # Actions / Buttons + # ------------------------------------------------------ + def confirm(self): + """ + Passe la coop en statut "soumis_cg" + """ + self.partner_id.scop_send_to_cg() + + return {"type": "ir.actions.act_window_close"} + + def save_data(self): + """ + Sauvegarder les données même avec erreurs + """ + return {"type": "ir.actions.act_window_close"} diff --git a/wizard/scop_submit_membership_wizard.xml b/wizard/scop_submit_membership_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..8738c8d516643f4c92d474c1a7240200b093f490 --- /dev/null +++ b/wizard/scop_submit_membership_wizard.xml @@ -0,0 +1,52 @@ +<?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="scop_submit_membership_wizard_form" + > + <field name="name">scop.submit.membership.wizard.form</field> + <field name="model">scop.submit.membership.wizard</field> + <field name="arch" type="xml"> + <form string="Confirmer les champs obligatoires"> + <div + class="alert alert-danger" + role="alert" + attrs="{'invisible':[('list_logs', '=', False)]}" + > + <field + class="o_field_header" + name="list_logs" + readonly="1" + widget="html" + /> + </div> + <group> + <field name="partner_id" readonly="1" /> + </group> + <footer> + <button + name="confirm" + type="object" + string="Valider avec adhésion" + class="oe_highlight" + attrs="{'invisible':[('list_logs', '!=', False)]}" + /> + <button + name="save_data" + type="object" + string="Sauvegarder" + class="oe_highlight" + attrs="{'invisible':[('list_logs', '=', False)]}" + /> + <button special="cancel" string="Annuler" /> + </footer> + </form> + </field> + </record> + + </data> +</odoo>