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 @@
-
-
- numéro de coopérateur
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Cette lettre vaut donc comme certificat que BEES coop scrl fs remplit en effet tous les critères permettant un tel avantage fiscal. Dans les grandes lignes :
-
- être une micro-entreprise qui répond à au moins deux des trois critères suivants :
- - le total du bilan est inférieur ou égal à 350.000 euros ;
- - le chiffre d’affaires, hors taxe sur la valeur ajoutée, est inférieur ou égal à 700.000 euros ;
- - la moyenne des travailleurs occupés pendant l’année est inférieure ou égale à 10.
-
- être une entreprise n’ayant encore jamais distribué de dividende et qui n'est pas issue d’une fusion ou scission de sociétés.
- Le maintien de la réduction d’impôt n’est possible que si l'investisseur conserve les parts de la coopérative pendant 4 ans au minimum, sauf si la sortie est imposée par des conditions extérieures (telles que la faillite, par exemple). En cas de sortie volontaire avant la période de 4 ans, l’avantage fiscal devra être remboursé au prorata du nombre de mois entre la sortie et les 4 ans. La coopérative s’engage à fournir pour chacune des quatre années suivant l’année d’acquisition une attestation certifiant que ces parts sont toujours en possession du souscripteur.
- L’apport de capitaux par le chef d’entreprise lui-même ou par des administrateurs existants de la société ne permet pas de bénéficier du tax shelter.
-
-Pour bénéficier de la réduction d’impôts, vous pouvez joindre cette lettre à votre déclaration fiscale pour les revenus 2015.
-
- l’Arrêté Royale en ligne.
- ]]>
-
-Cordialement,
-