trytond-account_payment_es_.../payment.py

429 lines
18 KiB
Python

# This file is part of account_payment_es_csb_34_1_la_caixa module for Tryton.
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.
from trytond.model import fields
from trytond.pool import PoolMeta
from trytond.pyson import Eval
import logging
try:
from retrofix import Record, write, c34_1_la_caixa as c34_1_lc
except ImportError:
logger = logging.getLogger(__name__)
message = ('Unable to import retrofix library.\n'
'Please install it before install this module.')
logger.error(message)
raise Exception(message)
__all__ = [
'Journal',
'Group',
]
__metaclass__ = PoolMeta
class Journal:
__name__ = 'account.payment.journal'
csb34_11_lc_type = fields.Selection([
('transfer', 'Transfers'),
('check', 'Checks'),
('promissory_note', 'Promissory Notes'),
('certified_payment', 'Certified Payments'),
], 'Type of CSB 34 payment')
csb34_11_lc_text1 = fields.Char('Line 1', help=(u'Enter text and/or '
'select a field of the invoice to include as a description in the '
'letter. Allowed values are: ${name}, ${bank_account}, '
'${invoices}, ${amount}, ${communication}, ${date}, '
'${maturity_date}, ${create_date}, ${date_created}, ${concept}.'))
csb34_11_lc_text2 = fields.Char('Line 2', help=(u'Enter text and/or '
'select a field of the invoice to include as a description in the '
'letter. Allowed values are: ${name}, ${bank_account}, '
'${invoices}, ${amount}, ${communication}, ${date}, '
'${maturity_date}, ${create_date}, ${date_created}, ${concept}.'))
csb34_11_lc_text3 = fields.Char('Line 3', help=(u'Enter text and/or '
'select a field of the invoice to include as a description in the '
'letter. Allowed values are: ${name}, ${bank_account}, '
'${invoices}, ${amount}, ${communication}, ${date}, '
'${maturity_date}, ${create_date}, ${date_created}, ${concept}.'))
csb34_11_lc_add_date = fields.Boolean('Add Date', help=('Check it if you '
'want to add the 910 data type in the file to include the payment '
'date.'))
@classmethod
def __setup__(cls):
super(Journal, cls).__setup__()
if (('csb34_1_lc', 'CSB 34-1 La Caixa')
not in cls.process_method.selection):
cls.process_method.selection.extend([
('csb34_1_lc', 'CSB 34-1 La Caixa'),
])
cls._error_messages.update({
'dear_sir': ('Dear Sir'),
'payement_ref': ('Payment ref.'),
'total': ('Total:'),
})
@staticmethod
def default_csb34_11_lc_type():
return 'transfer'
@staticmethod
def default_csb34_11_lc_not_to_the_order():
return True
@staticmethod
def default_csb34_11_lc_barred():
return True
@classmethod
def default_csb34_11_lc_text1(cls):
return '%s %s' % (cls.raise_user_error('dear_sir',
raise_exception=False), ' ${name},')
@classmethod
def default_csb34_11_lc_text2(cls):
return '%s %s' % (cls.raise_user_error('payement_ref',
raise_exception=False), ' ${communication}')
@classmethod
def default_csb34_11_lc_text3(cls):
return '%s %s' % (cls.raise_user_error('total',
raise_exception=False), ' ${amount}')
@staticmethod
def default_csb34_11_lc_add_date():
return True
@classmethod
def view_attributes(cls):
return super(Journal, cls).view_attributes() + [
('//group[@id="csb_34_1_lc"]', 'states', {
'invisible': Eval('process_method') != 'csb34_1_lc',
}),
('//group[@id="csb_34_1_lc"]/group[@id="csb_34_type"]', 'states', {
'invisible': Eval('csb34_11_lc_type') == 'transfer',
}),
('//group[@id="csb_34_1_lc"]/group[@id="csb_34_type"]/group[@id="csb_34_other"]', 'states', {
'invisible': Eval('send_type') == 'other',
})]
class Group:
__name__ = 'account.payment.group'
def map_message(self, receipt, message=''):
"""
Evaluates an expression and returns its value
@param recibo: Order line data
@param message: The expression to be evaluated
@return: Computed message (string)
"""
for field in receipt.iterkeys():
value = unicode(receipt[field])
message = message.replace('${' + field + '}', value)
return message
def set_default_csb34_1_lc_payment_values(self):
values = self.set_default_csb34_payment_values()
values['add_date'] = values['payment_journal'].csb34_11_lc_add_date
values['csb34_11_lc_type'] = values['payment_journal'].csb34_11_lc_type
for receipt in values['receipts']:
if values['csb34_11_lc_type'] != 'transfer':
receipt['bank_account'] = ''.zfill(17)
if values['send_type'] == 'mail':
receipt['bank_account'] += '1'
elif values['send_type'] == 'certified_mail':
receipt['bank_account'] += '2'
else:
receipt['bank_account'] += '3'
if values['not_to_the_order']:
receipt['bank_account'] += '1'
else:
receipt['bank_account'] += '0'
if values['barred']:
receipt['bank_account'] += '9'
else:
receipt['bank_account'] += '0'
receipt['message_101'] = self.map_message(receipt,
values['payment_journal'].csb34_11_lc_text1)
receipt['message_102'] = self.map_message(receipt,
values['payment_journal'].csb34_11_lc_text2)
receipt['message_103'] = self.map_message(receipt,
values['payment_journal'].csb34_11_lc_text3)
if values['add_date']:
(year, month, day) = str(receipt['maturity_date']).split('-')
receipt['date'] = day + month + year
return values
@classmethod
def process_csb34_1_lc(cls, group):
def set_ordering_header_record():
record = Record(c34_1_lc.ORDERING_HEADER_RECORD)
record.record_code = '03'
record.operation_code = '62'
record.nif = values['vat_code']
record.suffix = values['suffix']
record.data_number = '001'
record.send_date = values['payment_date']
record.creation_date = values['creation_date']
record.account = values['bank_account']
record.charge_detail = 'false' # or 'true'
return write([record])
def set_ordering_header_002_record():
record = Record(c34_1_lc.ORDERING_HEADER_002_RECORD)
record.record_code = '03'
record.operation_code = '62'
record.nif = values['vat_code']
record.suffix = values['suffix']
record.data_number = '002'
record.name = values['name']
return write([record])
def set_ordering_header_003_record():
record = Record(c34_1_lc.ORDERING_HEADER_003_RECORD)
record.record_code = '03'
record.operation_code = '62'
record.nif = values['vat_code']
record.suffix = values['suffix']
record.data_number = '003'
record.address = values['street']
return write([record])
def set_ordering_header_004_record():
record = Record(c34_1_lc.ORDERING_HEADER_004_RECORD)
record.record_code = '03'
record.operation_code = '62'
record.nif = values['vat_code']
record.suffix = values['suffix']
record.data_number = '004'
record.city = values['city']
return write([record])
def set_national_header_record():
record = Record(c34_1_lc.NATIONAL_HEADER_RECORD)
record.record_code = '04'
record.operation_code = '56'
record.nif = values['vat_code']
record.suffix = values['suffix']
return write([record])
def set_detail_001_record():
record = Record(c34_1_lc.DETAIL_001_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '010'
record.amount = receipt['amount']
record.bank_account = receipt['bank_account'] # receipt['data']
record.cost = receipt['cost']
record.concept = receipt['concept']
record.direct_payment = receipt['direct_payment']
return write([record])
def set_detail_002_record():
record = Record(c34_1_lc.DETAIL_002_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '011'
record.name = receipt['name']
return write([record])
def set_detail_003_record():
record = Record(c34_1_lc.DETAIL_003_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '012'
record.street = receipt['street'][:28]
return write([record])
def set_detail_004_record():
record = Record(c34_1_lc.DETAIL_004_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '013'
record.street2 = receipt['street2']
return write([record])
def set_detail_005_record():
record = Record(c34_1_lc.DETAIL_005_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '014'
record.zip_city = '%s%s' % (receipt['zip'], receipt['city'])
return write([record])
def set_detail_006_record():
record = Record(c34_1_lc.DETAIL_006_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '015'
record.country_code = receipt['country_code']
record.state = receipt['state']
return write([record])
def set_detail_007_record():
record = Record(c34_1_lc.DETAIL_007_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '016'
record.concept = receipt['concept']
return write([record])
def set_detail_009_record():
record = Record(c34_1_lc.DETAIL_009_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_number']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_number']
record.data_number = '018'
record.beneficiary_nif = receipt['vat_number']
return write([record])
def set_detail_101_record():
record = Record(c34_1_lc.DETAIL_101_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '101'
record.message = receipt['message_101'][:36]
return write([record])
def set_detail_102_record():
record = Record(c34_1_lc.DETAIL_102_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '102'
record.message = receipt['message_102'][:36]
return write([record])
def set_detail_103_record():
record = Record(c34_1_lc.DETAIL_103_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '103'
record.message = receipt['message_103']
return write([record])
def set_detail_910_record():
record = Record(c34_1_lc.DETAIL_910_RECORD)
record.record_code = '06'
record.operation_code = values['csb34_11_lc_type']
record.nif = values['vat_code']
record.suffix = values['suffix']
record.recipient_nif = receipt['vat_code']
record.data_number = '910'
record.message = receipt['date']
return write([record])
def set_national_footer_record():
record = Record(c34_1_lc.NATIONAL_FOOTER_RECORD)
record.record_code = '08'
record.operation_code = '56'
record.nif = values['vat_code']
record.suffix = values['suffix']
record.amount = values['amount']
record.payment_line_count = str(values['payment_count'])
record.record_count = str(values['detail_record_count'])
return write([record])
def set_ordering_footer_record():
record = Record(c34_1_lc.ORDERING_FOOTER_RECORD)
record.record_code = '09'
record.operation_code = '62'
record.nif = values['vat_code']
record.suffix = values['suffix']
record.amount = values['amount']
record.payment_line_count = str(values['payment_count'])
record.record_count = str(values['record_count'])
return write([record])
values = Group.set_default_csb34_1_lc_payment_values(group)
text = set_ordering_header_record()
values['record_count'] += 1
text += set_ordering_header_002_record()
values['record_count'] += 1
text += set_ordering_header_003_record()
values['record_count'] += 1
text += set_ordering_header_004_record()
values['record_count'] += 1
text += set_national_header_record()
values['record_count'] += 1
values['detail_record_count'] += 1
for receipt in values['receipts']:
text += set_detail_001_record()
values['record_count'] += 1
values['detail_record_count'] += 1
text += set_detail_002_record()
values['record_count'] += 1
values['detail_record_count'] += 1
if receipt['street']:
text += set_detail_003_record()
values['record_count'] += 1
values['detail_record_count'] += 1
if 'street2' in receipt and receipt['street2']:
text += set_detail_004_record()
values['record_count'] += 1
values['detail_record_count'] += 1
if receipt['zip'] or receipt['city']:
text += set_detail_005_record()
values['record_count'] += 1
values['detail_record_count'] += 1
if values['csb34_11_lc_type'] != 'transfer' \
and values['send_type'] in ('mail', 'certified_mail'):
text += set_detail_006_record()
values['record_count'] += 1
values['detail_record_count'] += 1
if values['payroll_check']:
text += set_detail_009_record()
values['record_count'] += 1
values['detail_record_count'] += 1
text += set_detail_101_record()
values['record_count'] += 1
values['detail_record_count'] += 1
text += set_detail_102_record()
values['record_count'] += 1
values['detail_record_count'] += 1
text += set_detail_103_record()
values['record_count'] += 1
values['detail_record_count'] += 1
if values['add_date']:
text += set_detail_910_record()
values['record_count'] += 1
values['detail_record_count'] += 1
values['payment_count'] += 1
values['detail_record_count'] += 1
text += set_national_footer_record()
values['record_count'] += 2
text += set_ordering_footer_record()
group.attach_file(text)