Revert rename of _check_generate_lines to version withouth underscore.

In pending merge request from Alexis, _check_generate_lines will no
    longer be called from outside the class, so no longer any need to change
    private function name convention to public name convention.

    This will also make it easier to merge all changes.
This commit is contained in:
Ronald Portier
2015-02-13 11:24:14 +01:00
committed by Alexis de Lattre
parent f869b0c267
commit 27abedf5b9

View File

@@ -1,8 +1,8 @@
# -*- encoding: utf-8 -*- # -*- encoding: utf-8 -*-
############################################################################## ##############################################################################
# #
# Report intrastat base module for Odoo # Report intrastat base module for OpenERP
# Copyright (C) 2010-2014 Akretion (http://www.akretion.com/). # Copyright (C) 2010-2013 Akretion (http://www.akretion.com/).
# @author Alexis de Lattre <alexis.delattre@akretion.com> # @author Alexis de Lattre <alexis.delattre@akretion.com>
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
@@ -20,8 +20,9 @@
# #
############################################################################## ##############################################################################
from openerp import models, fields, api, tools, _ from openerp.osv import orm
from openerp.exceptions import Warning, ValidationError from openerp.tools.translate import _
from openerp import tools
from datetime import datetime from datetime import datetime
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
import logging import logging
@@ -29,61 +30,81 @@ import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class ReportIntrastatCommon(models.AbstractModel): class report_intrastat_common(orm.TransientModel):
_name = "report.intrastat.common" _name = "report.intrastat.common"
_description = "Common functions for intrastat reports for products " _description = "Common functions for intrastat reports for products "
"and services" "and services"
@api.one def _compute_numbers(self, cr, uid, ids, object, context=None):
@api.depends( result = {}
'intrastat_line_ids', 'intrastat_line_ids.amount_company_currency') for intrastat in object.browse(cr, uid, ids, context=context):
def _compute_numbers(self):
total_amount = 0.0 total_amount = 0.0
num_lines = 0 num_lines = 0
for line in self.intrastat_line_ids: for line in intrastat.intrastat_line_ids:
total_amount += line.amount_company_currency total_amount += line.amount_company_currency
num_lines += 1 num_lines += 1
self.num_lines = num_lines result[intrastat.id] = {
self.total_amount = total_amount 'num_lines': num_lines,
'total_amount': total_amount,
}
return result
@api.one def _compute_dates(self, cr, uid, ids, object, context=None):
@api.depends('start_date') result = {}
def _compute_dates(self): for intrastat in object.browse(cr, uid, ids, context=context):
start_date_dt = fields.Date.from_string(self.start_date) start_date_datetime = datetime.strptime(
self.end_date = fields.Date.to_string( intrastat.start_date, '%Y-%m-%d')
start_date_dt + relativedelta(day=31)) end_date_str = datetime.strftime(
self.year_month = start_date_dt.strftime('%Y-%m') start_date_datetime + relativedelta(day=31), '%Y-%m-%d')
result[intrastat.id] = {
'end_date': end_date_str,
'year_month': start_date_datetime.strftime('%Y-%m'),
}
return result
@api.one def _check_start_date(self, cr, uid, ids, object, context=None):
def _check_start_date(self):
'''Check that the start date is the first day of the month''' '''Check that the start date is the first day of the month'''
datetime_to_check = fields.Date.from_string(self.start_date) for date_to_check in object.read(
cr, uid, ids, ['start_date'], context=context):
datetime_to_check = datetime.strptime(
date_to_check['start_date'], '%Y-%m-%d')
if datetime_to_check.day != 1: if datetime_to_check.day != 1:
raise ValidationError( return False
_('The start date must be the first day of the month')) return True
@api.one def _check_generate_lines(self, cr, uid, intrastat, context=None):
def _check_generate_lines(self): """Check wether all requirements are met for generating lines."""
if not self.company_id.country_id: if not intrastat.company_id:
raise Warning( # Should not be possible, but just in case:
raise orm.except_orm(
_('Error :'),
_("Company not yet set on intrastat report.")
)
company_obj = intrastat.company_id # Simplify references
if not company_obj.country_id:
raise orm.except_orm(
_('Error :'),
_("The country is not set on the company '%s'.") _("The country is not set on the company '%s'.")
% self.company_id.name) % company_obj.name
if self.currency_id.name != 'EUR': )
raise Warning( if not company_obj.currency_id.name == 'EUR':
raise orm.except_orm(
_('Error :'),
_("The company currency must be 'EUR', but is currently '%s'.") _("The company currency must be 'EUR', but is currently '%s'.")
% self.currency_id.name) % company_obj.currency_id.name
)
return True return True
@api.one def _check_generate_xml(self, cr, uid, intrastat, context=None):
def _check_generate_xml(self): if not intrastat.company_id.partner_id.vat:
if not self.company_id.partner_id.vat: raise orm.except_orm(
raise Warning( _('Error :'),
_("The VAT number is not set for the partner '%s'.") _("The VAT number is not set for the partner '%s'.")
% self.company_id.partner_id.name) % intrastat.company_id.partner_id.name)
return True return True
@api.model def _check_xml_schema(
def _check_xml_schema(self, xml_root, xml_string, xsd_file): self, cr, uid, xml_root, xml_string, xsd_file, context=None):
'''Validate the XML file against the XSD''' '''Validate the XML file against the XSD'''
from lxml import etree from lxml import etree
xsd_etree_obj = etree.parse( xsd_etree_obj = etree.parse(
@@ -93,12 +114,13 @@ class ReportIntrastatCommon(models.AbstractModel):
official_schema.assertValid(xml_root) official_schema.assertValid(xml_root)
except Exception, e: except Exception, e:
# if the validation of the XSD fails, we arrive here # if the validation of the XSD fails, we arrive here
logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
logger.warning( _logger.warning(
"The XML file is invalid against the XML Schema Definition") "The XML file is invalid against the XML Schema Definition")
logger.warning(xml_string) _logger.warning(xml_string)
logger.warning(e) _logger.warning(e)
raise Warning( raise orm.except_orm(
_('Error :'),
_("The generated XML file is not valid against the official " _("The generated XML file is not valid against the official "
"XML Schema Definition. The generated XML file and the " "XML Schema Definition. The generated XML file and the "
"full error have been written in the server logs. " "full error have been written in the server logs. "
@@ -107,29 +129,39 @@ class ReportIntrastatCommon(models.AbstractModel):
% str(e)) % str(e))
return True return True
@api.multi def _attach_xml_file(
def _attach_xml_file(self, xml_string, declaration_name): self, cr, uid, ids, object, xml_string, start_date_datetime,
declaration_name, context=None):
'''Attach the XML file to the report_intrastat_product/service ''' '''Attach the XML file to the report_intrastat_product/service '''
'''object''' '''object'''
self.ensure_one()
import base64 import base64
filename = '%s_%s.xml' % (self.year_month, declaration_name) assert len(ids) == 1, "Only one ID accepted"
attach = self.with_context( filename = '%s_%s.xml' % (
default_res_id=self.id, datetime.strftime(start_date_datetime, '%Y-%m'),
default_res_model=self._name).env['ir.attachment'].create({ declaration_name)
if not context:
context = {}
context.update({
'default_res_id': ids[0],
'default_res_model': object._name
})
attach_id = self.pool['ir.attachment'].create(
cr, uid, {
'name': filename, 'name': filename,
'datas': base64.encodestring(xml_string), 'datas': base64.encodestring(xml_string),
'datas_fname': filename}) 'datas_fname': filename},
return attach.id context=context)
return attach_id
@api.model def _open_attach_view(
def _open_attach_view(self, attach_id, title='XML file'): self, cr, uid, attach_id, title='XML file', context=None):
'''Returns an action which opens the form view of the ''' '''Returns an action which opens the form view of the '''
'''corresponding attachement''' '''corresponding attachement'''
action = { action = {
'name': title, 'name': title,
'view_type': 'form', 'view_type': 'form',
'view_mode': 'form', 'view_mode': 'form,tree',
'view_id': False,
'res_model': 'ir.attachment', 'res_model': 'ir.attachment',
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',
'nodestroy': True, 'nodestroy': True,
@@ -138,27 +170,30 @@ class ReportIntrastatCommon(models.AbstractModel):
} }
return action return action
@api.one def partner_on_change(self, cr, uid, ids, partner_id=False, context=None):
def send_reminder_email(self, mail_template_xmlid): result = {}
mail_template = self.env.ref(mail_template_xmlid) result['value'] = {}
if self.company_id.intrastat_remind_user_ids: if partner_id:
company = self.pool['res.partner'].read(
cr, uid, partner_id, ['vat'], context=context)
result['value']['partner_vat'] = company['vat']
return result
def send_reminder_email(
self, cr, uid, company, module_name, template_xmlid,
intrastat_id, context=None):
template_model, template_id =\
self.pool['ir.model.data'].get_object_reference(
cr, uid, module_name, template_xmlid)
assert template_model == 'email.template', 'Wrong model'
if company.intrastat_remind_user_ids:
self.pool['email.template'].send_mail( self.pool['email.template'].send_mail(
self._cr, self._uid, mail_template.id, self.id, cr, uid, template_id, intrastat_id, context=context)
context=self._context)
logger.info( logger.info(
'Intrastat Reminder email has been sent (XMLID: %s).' 'Intrastat Reminder email has been sent (XMLID: %s).'
% mail_template_xmlid) % template_xmlid)
else: else:
logger.warning( logger.warning(
'The list of users receiving the Intrastat Reminder is empty ' 'The list of users receiving the Intrastat Reminder is empty '
'on company %s' % self.company_id.name) 'on company %s' % company.name)
return True return True
@api.multi
def unlink(self):
for intrastat in self:
if intrastat.state == 'done':
raise Warning(
_('Cannot delete the declaration %s '
'because it is in Done state') % self.year_month)
return super(ReportIntrastatCommon, self).unlink()