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 e5f5370..e5ca765 100644 --- a/easy_my_coop_taxshelter_report/models/tax_shelter_declaration.py +++ b/easy_my_coop_taxshelter_report/models/tax_shelter_declaration.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import base64 from datetime import datetime from openerp import api, fields, models, _ @@ -13,9 +14,12 @@ class TaxShelterDeclaration(models.Model): _name = "tax.shelter.declaration" name = fields.Char(string='Declaration year', required=True) + fiscal_year = fields.Char(String="Fiscal year", required=True) tax_shelter_certificates = fields.One2many('tax.shelter.certificate','declaration_id', string='Tax shelter certificates', readonly=True) date_from = fields.Date(string='Date from', required=True) date_to = fields.Date(string='Date to', required=True) + month_from = fields.Char(String='Month from', required=True) + month_to = fields.Char(String='Month to', required=True) tax_shelter_percentage = fields.Selection([('30','30%'), ('45','45%')], string='Tax Shelter percentage', required=True) @@ -23,7 +27,11 @@ class TaxShelterDeclaration(models.Model): ('computed','Computed'), ('validated','Validated')], string='State',required=True, default="draft") - + company_id = fields.Many2one('res.company', string='Company', required=True, + change_default=True, readonly=True, + default=lambda self: self.env['res.company']._company_default_get()) + tax_shelter_capital_limit = fields.Float(string="Tax shelter capital limite", required=True) + def _prepare_line(self, certificate, entry): line_vals = {} line_vals['tax_shelter_certificate'] = certificate.id @@ -35,12 +43,7 @@ class TaxShelterDeclaration(models.Model): line_vals['type'] = TYPE_MAP[entry.type] return line_vals - @api.one - def compute_declaration(self): - entries = self.env['subscription.register'].search([('date','>=',self.date_from), - ('date','<=',self.date_to), - ('type','in',['subscription','sell_back','transfer'])]) - partner_certificate = {} + def _compute_certificates(self,entries,partner_certificate): for entry in entries: certificate = partner_certificate.get(entry.partner_id.id, False) if not certificate: @@ -53,7 +56,24 @@ class TaxShelterDeclaration(models.Model): partner_certificate[entry.partner_id.id] = certificate line_vals = self._prepare_line(certificate, entry) 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), + ('date','<=',self.date_to), + ('type','=','subscription')]) + partner_certificate = self._compute_certificates(entries, partner_certificate = {}) + + entries = self.env['subscription.register'].search([('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() + @api.one def validate_declaration(self): self.state = 'validated' @@ -61,7 +81,11 @@ class TaxShelterDeclaration(models.Model): @api.one def reset_declaration(self): 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 class TaxShelterCertificate(models.Model): _name = "tax.shelter.certificate" @@ -83,13 +107,48 @@ class TaxShelterCertificate(models.Model): 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) + + @api.multi + 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'} + + 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() + return self.env['report'].get_action(self, 'easy_my_coop_taxshelter_report.tax_shelter_subscription_report') + @api.multi + def print_shares_certificate(self): + self.ensure_one() + return self.env['report'].get_action(self, 'easy_my_coop_taxshelter_report.tax_shelter_shares_report') + @api.multi def _compute_amounts(self): - total_amount_subscribed = 0 - total_amount_transfered = 0 - total_amount_resold = 0 for certificate in self: + total_amount_subscribed = 0 + total_amount_transfered = 0 + total_amount_resold = 0 + for line in certificate.subscribed_lines: total_amount_subscribed += line.amount_subscribed certificate.total_amount_subscribed = total_amount_subscribed @@ -111,7 +170,7 @@ class TaxShelterCertificate(models.Model): certificate.transfered_lines = certificate.lines.filtered(lambda r: r.type == 'transfered') class TaxShelterCertificateLine(models.Model): - _name="certificate.line" + _name= "certificate.line" 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) diff --git a/easy_my_coop_taxshelter_report/report/tax_shelter_report.xml b/easy_my_coop_taxshelter_report/report/tax_shelter_report.xml deleted file mode 100644 index 1bb4b4c..0000000 --- a/easy_my_coop_taxshelter_report/report/tax_shelter_report.xml +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - 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 fb6d0ba..c32fe47 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 @@ -10,7 +10,8 @@
@@ -18,11 +19,15 @@ + + + + @@ -33,6 +38,9 @@ +