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 @@
@@ -80,6 +77,9 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -147,6 +160,7 @@
tax.shelter.certificate
+