From 184f0a3b9f5abd0be6a710749c1bd6f8d6688823 Mon Sep 17 00:00:00 2001 From: houssine Date: Mon, 3 Apr 2017 17:40:24 +0200 Subject: [PATCH] [IMP] last dev on the modules. --- .../models/mail_template.py | 5 +- .../models/tax_shelter_declaration.py | 95 +++++++++++-------- .../views/tax_shelter_declaration_view.xml | 26 +++-- 3 files changed, 80 insertions(+), 46 deletions(-) diff --git a/easy_my_coop_taxshelter_report/models/mail_template.py b/easy_my_coop_taxshelter_report/models/mail_template.py index 54def59..f9f12a6 100644 --- a/easy_my_coop_taxshelter_report/models/mail_template.py +++ b/easy_my_coop_taxshelter_report/models/mail_template.py @@ -1,8 +1,9 @@ - +# -*- coding: utf-8 -*- +from openerp import api, fields, models, _ class MailTemplate(models.Model): "Templates for sending email" - _name = "mail.template" + _inherit = "mail.template" @api.multi def send_mail_with_multiple_attachments(self, res_id, additional_attachments, force_send=False, raise_exception=False): diff --git a/easy_my_coop_taxshelter_report/models/tax_shelter_declaration.py b/easy_my_coop_taxshelter_report/models/tax_shelter_declaration.py index e5ca765..7365ebf 100644 --- a/easy_my_coop_taxshelter_report/models/tax_shelter_declaration.py +++ b/easy_my_coop_taxshelter_report/models/tax_shelter_declaration.py @@ -9,7 +9,8 @@ TYPE_MAP = { 'transfer':'transfered', 'sell_back':'resold' } - +REPORT_DIC = {'subscription':('easy_my_coop_taxshelter_report.tax_shelter_subscription_report','Tax Shelter Subscription'), + 'shares':('easy_my_coop_taxshelter_report.tax_shelter_shares_report','Tax Shelter Shares')} class TaxShelterDeclaration(models.Model): _name = "tax.shelter.declaration" @@ -55,27 +56,28 @@ class TaxShelterDeclaration(models.Model): certificate = self.env['tax.shelter.certificate'].create(cert_vals) partner_certificate[entry.partner_id.id] = certificate line_vals = self._prepare_line(certificate, entry) - self.env['certificate.line'].create(line_vals) + certificate.write({'lines': [(0, 0, line_vals)]}) + #self.env['certificate.line'].create(line_vals) return partner_certificate @api.one def compute_declaration(self): - entries = self.env['subscription.register'].search([('date','>=',self.date_from), + partner_certificate = {} + entries = self.env['subscription.register'].search([('partner_id.is_company','=',False), ('date','<=',self.date_to), ('type','=','subscription')]) - partner_certificate = self._compute_certificates(entries, partner_certificate = {}) + partner_certificate = self._compute_certificates(entries, partner_certificate) - entries = self.env['subscription.register'].search([('date','<=',self.date_to), + entries = self.env['subscription.register'].search([('partner_id.is_company','=',False), + ('date','<=',self.date_to), ('type','in',['sell_back','transfer'])]) partner_certificate = self._compute_certificates(entries, partner_certificate) - self.state = 'computed' - @api.one - def generate_attachments(self): - self.tax_shelter_certificates.generate_certificates_report() + self.state = 'computed' @api.one def validate_declaration(self): + self.tax_shelter_certificates.write({'state':'validated'}) self.state = 'validated' @api.one @@ -83,9 +85,7 @@ class TaxShelterDeclaration(models.Model): if not self.state == 'validated': certificate_ids = self.tax_shelter_certificates.ids self.tax_shelter_certificates.unlink() - certificate_attchments = self.env['ir.attachment'].search([('res_model','=','tax.shelter.certificate'), - ('res_id','in',certificate_ids)]) - certificate_attchments.unlink + self.state = 'draft' class TaxShelterCertificate(models.Model): _name = "tax.shelter.certificate" @@ -100,38 +100,43 @@ class TaxShelterCertificate(models.Model): string='State',required=True, default="draft") declaration_id = fields.Many2one('tax.shelter.declaration', string='Declaration', required=True, readonly=True) lines = fields.One2many('certificate.line','tax_shelter_certificate', string='Certificate lines', readonly=True) + previously_subscribed_lines = fields.One2many(compute='_compute_certificate_lines', comodel_name='certificate.line', string='Previously Subscribed lines', readonly=True) subscribed_lines = fields.One2many(compute='_compute_certificate_lines', comodel_name='certificate.line', string='Shares subscribed', readonly=True) resold_lines = fields.One2many(compute='_compute_certificate_lines', comodel_name='certificate.line', string='Shares resold', readonly=True) transfered_lines = fields.One2many(compute='_compute_certificate_lines', comodel_name='certificate.line', string='Shares transfered', readonly=True) + total_amount_previously_subscribed = fields.Float(compute='_compute_amounts', string='Total subscribed') total_amount_subscribed = fields.Float(compute='_compute_amounts', string='Total subscribed') total_amount_resold = fields.Float(compute='_compute_amounts', string='Total resold') total_amount_transfered = fields.Float(compute='_compute_amounts', string='Total transfered') total_amount = fields.Float(compute='_compute_amounts', string='Total', readonly=True) company_id = fields.Many2one(related="declaration_id.company_id", string="Company") - def attach_to_certificate(self, report, report_name): - attachment_data = { - 'name': report_name, - 'datas_fname': report_name, - 'datas': report, - 'res_model': 'tax.shelter.certificate', - 'res_id': self.id, - } - self.env['ir.attachment'].create(attachment_data) + def generate_pdf_report(self,report_type): + report_action, name = REPORT_DIC[report_type] + report = self.env['report'].get_pdf(self, report_action) + report = base64.b64encode(report) + report_name = self.partner_id.name + ' ' + name + ' ' + self.declaration_id.name + '.pdf' - @api.multi + return (report_name, report) + def generate_certificates_report(self): - report_dic = {'easy_my_coop_taxshelter_report.tax_shelter_subscription_report':'Tax Shelter Subscription', - 'easy_my_coop_taxshelter_report.tax_shelter_shares_report':'Tax Shelter Shares'} + attachments = [] + if self.total_amount_subscribed > 0: + if self.total_amount_resold == 0 and self.total_amount_transfered == 0: + attachments.append(self.generate_pdf_report('subscription')) + if self.total_amount_previously_subscribed > 0: + attachments.append(self.generate_pdf_report('shares')) + #if self.total_amount_resold > 0 or self.total_amount_transfered > 0: + # TODO + return attachments + + @api.one + def send_certificates(self): + attachments = self.generate_certificates_report() + if len(attachments) > 0: + confirmation_mail_template = self.env['mail.template'].search([('name', '=', 'Tax Shelter Certificate - Send By Email')])[0] + confirmation_mail_template.send_mail_with_multiple_attachments(self.id, attachments,True) - for certificate in self: - for report_action, name in report_dic.items(): - report = self.env['report'].get_pdf(certificate, report_action) - report = base64.b64encode(report) - report_name = certificate.partner_id.name + ' ' + name + ' ' + certificate.declaration_id.name + '.pdf' - - certificate.attach_to_certificate(report, report_name) - @api.multi def print_subscription_certificate(self): self.ensure_one() @@ -145,6 +150,7 @@ class TaxShelterCertificate(models.Model): @api.multi def _compute_amounts(self): for certificate in self: + total_amount_previously_subscribed = 0 total_amount_subscribed = 0 total_amount_transfered = 0 total_amount_resold = 0 @@ -153,6 +159,10 @@ class TaxShelterCertificate(models.Model): total_amount_subscribed += line.amount_subscribed certificate.total_amount_subscribed = total_amount_subscribed + for line in certificate.previously_subscribed_lines: + total_amount_previously_subscribed += line.amount_subscribed + certificate.total_amount_previously_subscribed = total_amount_previously_subscribed + for line in certificate.transfered_lines: total_amount_transfered += line.amount_transfered certificate.total_amount_transfered = total_amount_transfered @@ -160,19 +170,28 @@ class TaxShelterCertificate(models.Model): for line in certificate.resold_lines: total_amount_resold += line.amount_resold certificate.total_amount_resold = total_amount_resold - certificate.total_amount = certificate.total_amount_subscribed + certificate.total_amount_resold + certificate.total_amount_transfered - + certificate.total_amount = certificate.total_amount_previously_subscribed + certificate.total_amount_subscribed + certificate.total_amount_resold + certificate.total_amount_transfered + @api.multi def _compute_certificate_lines(self): for certificate in self: - certificate.subscribed_lines = certificate.lines.filtered(lambda r: r.type == 'subscribed') - certificate.resold_lines = certificate.lines.filtered(lambda r: r.type == 'resold') - certificate.transfered_lines = certificate.lines.filtered(lambda r: r.type == 'transfered') + certificate.previously_subscribed_lines = certificate.lines.filtered(lambda r: r.type == 'subscribed' and r.transaction_date < certificate.declaration_id.date_from) + certificate.subscribed_lines = certificate.lines.filtered(lambda r: r.type == 'subscribed' and r.transaction_date >= certificate.declaration_id.date_from and r.transaction_date <= certificate.declaration_id.date_to) + certificate.resold_lines = certificate.lines.filtered(lambda r: r.type == 'resold' and r.transaction_date >= certificate.declaration_id.date_from and r.transaction_date <= certificate.declaration_id.date_to) + certificate.transfered_lines = certificate.lines.filtered(lambda r: r.type == 'transfered' and r.transaction_date >= certificate.declaration_id.date_from and r.transaction_date <= certificate.declaration_id.date_to) + @api.model + def batch_send_tax_shelter_certificate(self): + certificates = self.search([('state','=','validated')],limit=40) + for certificate in certificates: + certificate.send_certificates() + certificate.state = 'sent' + self.env.cr.commit() + class TaxShelterCertificateLine(models.Model): _name= "certificate.line" - tax_shelter_certificate = fields.Many2one('tax.shelter.certificate', string="Tax shelter certificate",ondelete='cascade',required=True) + tax_shelter_certificate = fields.Many2one('tax.shelter.certificate', string="Tax shelter certificate", ondelete='cascade', required=True) share_type = fields.Many2one('product.product', string='Share type', required=True, readonly=True) share_unit_price = fields.Float(string='Share price', required=True, readonly=True) quantity = fields.Integer(string='Number of shares', required=True, readonly=True) diff --git a/easy_my_coop_taxshelter_report/views/tax_shelter_declaration_view.xml b/easy_my_coop_taxshelter_report/views/tax_shelter_declaration_view.xml index c32fe47..dad9811 100644 --- a/easy_my_coop_taxshelter_report/views/tax_shelter_declaration_view.xml +++ b/easy_my_coop_taxshelter_report/views/tax_shelter_declaration_view.xml @@ -9,10 +9,9 @@
-
@@ -38,9 +37,7 @@ -