From 4d08bde23b3e01b819578dd2ce675ffb6960b5b0 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 15 Mar 2022 15:45:52 +0000 Subject: [PATCH] duplication operation --- __init__.py | 3 +- __manifest__.py | 3 +- models/operation.py | 55 +++++++++++++++- models/payment_batch.py | 95 +++++++++++++++++++-------- models/product.py | 10 +++ security/ir.model.access.csv | 2 + views/operation.xml | 4 +- views/payment_batch.xml | 2 +- views/templates.xml | 10 +-- wizard/__init__.py | 1 + wizard/operation_duplicate_wizard.py | 17 +++++ wizard/operation_duplicate_wizard.xml | 28 ++++++++ 12 files changed, 189 insertions(+), 41 deletions(-) create mode 100644 models/product.py create mode 100644 wizard/__init__.py create mode 100644 wizard/operation_duplicate_wizard.py create mode 100644 wizard/operation_duplicate_wizard.xml diff --git a/__init__.py b/__init__.py index 511a0ca..a24914b 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- from . import controllers -from . import models \ No newline at end of file +from . import models +from . import wizard \ No newline at end of file diff --git a/__manifest__.py b/__manifest__.py index 9489954..d8318a1 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -38,7 +38,8 @@ 'views/returnmail.xml', 'views/payment_batch.xml', 'views/website_sale.xml', - 'views/templates.xml' + 'wizard/operation_duplicate_wizard.xml' + ], # only loaded in demonstration mode diff --git a/models/operation.py b/models/operation.py index 8a213f1..5b7887b 100644 --- a/models/operation.py +++ b/models/operation.py @@ -1,4 +1,4 @@ -from odoo import models, fields, api +from odoo import models, fields, api,_ from odoo.exceptions import UserError, ValidationError,Warning from psycopg2 import sql, DatabaseError @@ -30,7 +30,7 @@ class opendons_operation(models.Model): _inherit = ['mail.thread'] #_order = "__last_update desc" #code=fields.Char(string='Code',required=True, translate=True,track_visibility='always') - name=fields.Char(string='Name',required=True, translate=True,track_visibility='always') + name=fields.Char(string='Name',required=True, translate=True,copy=False,default='operation',track_visibility='always') partner_count = fields.Integer(string="count",readonly=True) exported_date=fields.Date(string='Exported Date',track_visibility='always') #end_date=fields.Date(string='Date end',required=True, translate=True,track_visibility='always') @@ -292,6 +292,57 @@ class opendons_operation(models.Model): self.document_fname='operation'+seld.id+'.csv' return + def copy(self,default_values=None): + + + + vals={} + vals['name']='copy of ' + self.name + vals['chanel']=self.chanel + vals['user_id']=self._uid + vals['state']='draft' + dup_operation=super(opendons_operation, self).create(vals) + + + #on duplique les segment de l'opération + for segment_id in self.segment_ids: + #raise Warning(segment_id.id) + seg=self.env['opendons.segment'].search([('id','=',int(segment_id.id))]) + + if seg: + vals2={} + vals2['operation_id']=dup_operation.id + vals2['name']=seg.name + vals2['mailing_domain']=seg.mailing_domain + #dup_segment=super(opendons_segment,self).create(vals2) + dup_segment=self.env['opendons.segment'].create(vals2) + dup_operation.write({'segment_ids':[(4,dup_segment.id)]}) + + for ensemble_id in seg.ensemble_ids: + ens=self.env['opendons.ensemble'].search([('id','=',int(ensemble_id.id))]) + if ens: + vals3={} + vals3['segment_id']=dup_segment.id + vals3['name']=ens.name + vals3['mailing_domain']=ens.mailing_domain + #dup_segment=super(opendons_segment,self).create(vals2) + dup_ensemble=self.env['opendons.ensemble'].create(vals3) + dup_segment.write({'ensemble_ids':[(4,dup_ensemble.id)]}) + + for request_id in ens.request_ids: + req=self.env['opendons.request'].search([('id','=',int(request_id.id))]) + if req: + vals4={} + vals4['ensemble_id']=dup_ensemble.id + vals4['name']=req.name + vals4['mailing_domain']=req.mailing_domain + #dup_segment=super(opendons_segment,self).create(vals2) + dup_request=self.env['opendons.request'].create(vals4) + dup_ensemble.write({'request_ids':[(4,dup_request.id)]}) + + #rtn=super(opendons_operation,self).copy(default=default_values) + + return dup_operation class opendons_segment(models.Model): diff --git a/models/payment_batch.py b/models/payment_batch.py index 1a4edc9..677cf8e 100644 --- a/models/payment_batch.py +++ b/models/payment_batch.py @@ -1,5 +1,5 @@ from odoo import models, fields, api -from odoo.exceptions import UserError, ValidationError +from odoo.exceptions import UserError, ValidationError,Warning from psycopg2 import sql, DatabaseError from werkzeug import utils @@ -27,8 +27,8 @@ class opendons_payment_batch(models.Model): 'Product', required=True, domain=[('donation', '=', True)], - ondelete='restrict', - store=False + ondelete='restrict' + ) @@ -89,7 +89,7 @@ class opendons_payment_batch(models.Model): donation_amount = fields.Monetary( 'Donation amount', currency_field='currency_id', - store=False, + ) # payment_lines = fields.One2many( # 'opendons_payment_batch.lines', @@ -107,37 +107,62 @@ class opendons_payment_batch(models.Model): def _onchange_payment_input(self): if self.payment_input: - - - inpt=self.payment_input.split(';') - if len(inpt)!=4:raise ValidationError('input string not valid') - partner_id=int(inpt[0]) - key=inpt[1] - operation_id=int(inpt[2]) - segment_id=int(inpt[3]) - - partner = self.env['res.partner'].sudo().search(['&',('id','=',int(partner_id)),('key','=',key)]) - operation = self.env['res.partner'].sudo().search([('id','=',int(operation_id))]) - segment = self.env['res.partner'].sudo().search([('id','=',int(segment_id))]) - - if not partner : ValidationError('partner not found') - if not operation : ValidationError('operation not found') - if not segment : ValidationError('segment not found') - - - self.partner_id=partner_id - self.operation_id=operation_id - self.segment_id=segment_id - res=self.action_ajouter_payment() + + #si le QRCODE a déjà été utilisé, message d'avertissement + qrcode_exist=self.env['opendons.payment_batch_qrcode'].search([('qrcode','=',self.payment_input)]) + if qrcode_exist : raise Warning('qrcode already used') + + if self.input_mode=='loyalty': + + inpt=self.payment_input.split(';') + if len(inpt)!=4:raise ValidationError('input string not valid') + partner_id=int(inpt[0]) + key=inpt[1] + operation_id=int(inpt[2]) + segment_id=int(inpt[3]) + + partner = self.env['res.partner'].sudo().search(['&',('id','=',int(partner_id)),('key','=',key)]) + operation = self.env['res.partner'].sudo().search([('id','=',int(operation_id))]) + segment = self.env['res.partner'].sudo().search([('id','=',int(segment_id))]) + + if not partner : ValidationError('partner not found') + if not operation : ValidationError('operation not found') + if not segment : ValidationError('segment not found') + + self.partner_id=partner_id + self.operation_id=operation_id + self.segment_id=segment_id + res=self.action_ajouter_payment() - + if self.input_mode=='prospect': + inpt=self.payment_input.split(';') + if len(inpt)!=4:raise ValidationError('input string not valid') + partner_string=int(inpt[0]) + key=inpt[1] + operation_id=int(inpt[2]) + segment_id=int(inpt[3]) + + #partner = self.env['res.partner'].sudo().search(['&',('id','=',int(partner_id)),('key','=',key)]) + operation = self.env['res.partner'].sudo().search([('id','=',int(operation_id))]) + segment = self.env['res.partner'].sudo().search([('id','=',int(segment_id))]) + + #if not partner : ValidationError('partner not found') + if not operation : ValidationError('operation not found') + if not segment : ValidationError('segment not found') + + #self.partner_id=partner_id + self.operation_id=operation_id + self.segment_id=segment_id + #res=self.action_ajouter_payment() def action_ajouter_payment(self): + + vals={} vals['payment_batch_id']=self.id vals['payment_mode_id']=int(self.payment_mode_id) @@ -154,14 +179,26 @@ class opendons_payment_batch(models.Model): vals['donation_id']=donation.id vals['currency_id']=self.currency_id #vals['company_currency_id']=self.company_currency_id - vals['product_id']=int(self.product_id) + vals['product_id']=self.product_id.id vals['quantity']=1 vals['unit_price']=self.donation_amount donation_line=self.env['donation.line'].create(vals) donation.validate() + vals={} + + vals['qrcode']=self.payment_input + self.env['opendons.payment_batch_qrcode'].create(vals) + + self.payment_input=False + self.partner_id=False + self.operation_id=False + self.segment_id=False return True + class opendons_payment_batch_qrcode(models.Model): + _name = 'opendons.payment_batch_qrcode' + _description = 'store qrcode to avoid duplicate entries' - \ No newline at end of file + qrcode=fields.Char('qrcode') diff --git a/models/product.py b/models/product.py new file mode 100644 index 0000000..3216e2b --- /dev/null +++ b/models/product.py @@ -0,0 +1,10 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError, ValidationError +from psycopg2 import sql, DatabaseError + +from werkzeug import utils + + + + + \ No newline at end of file diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 36ff341..98ad175 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -20,4 +20,6 @@ access_opendons_returnmail,opendons_returnmail,model_opendons_returnmail,donatio access_opendons_returnmailnpai,opendons_returnmailnpai,model_opendons_returnmail_npai,donation.group_donation_manager,1,1,1,1 access_opendons_payment_batch,opendons_payment_batch,model_opendons_payment_batch,donation.group_donation_manager,1,1,1,1 +access_opendons_payment_batch_qr_code,opendons_payment_batch_qrcode,model_opendons_payment_batch_qrcode,donation.group_donation_manager,1,1,1,1 +access_opendons_duplicate_operation_wizard,opendons_duplicate_operation_wizard,model_opendons_operation_duplicate,donation.group_donation_manager,1,1,1,1 \ No newline at end of file diff --git a/views/operation.xml b/views/operation.xml index 375ac3b..def9dfa 100644 --- a/views/operation.xml +++ b/views/operation.xml @@ -27,7 +27,7 @@ opendons_operations list opendons.operation - + @@ -124,7 +124,7 @@ opendons_operation Form opendons.operation -
+