|  | @@ -3,230 +3,20 @@ from openerp import http
 | 
	
		
			
				|  |  |  from openerp.http import request
 | 
	
		
			
				|  |  |  from werkzeug.wrappers import Response
 | 
	
		
			
				|  |  |  from werkzeug.datastructures import Headers
 | 
	
		
			
				|  |  | -from datetime import datetime
 | 
	
		
			
				|  |  |  from dateutil.relativedelta import relativedelta as rd
 | 
	
		
			
				|  |  |  from dateutil.parser import parse
 | 
	
		
			
				|  |  | -from pytz import timezone
 | 
	
		
			
				|  |  |  from gzip import GzipFile
 | 
	
		
			
				|  |  |  from StringIO import StringIO as IO
 | 
	
		
			
				|  |  |  import simplejson as json
 | 
	
		
			
				|  |  |  import gzip
 | 
	
		
			
				|  |  | -import logging
 | 
	
		
			
				|  |  | +# import logging
 | 
	
		
			
				|  |  | +from eiru_logging import make_info_log
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -LOGGER = logging.getLogger(__name__)
 | 
	
		
			
				|  |  | -DATE_FORMAT = '%Y-%m-%d'
 | 
	
		
			
				|  |  | -DATETIME_FORMAT = '%Y-%m-%d %H:%m:%S'
 | 
	
		
			
				|  |  | +# LOGGER = logging.getLogger(__name__)
 | 
	
		
			
				|  |  |  GZIP_COMPRESSION_LEVEL = 9
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class Statement(http.Controller):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    ''' Get timezone '''
 | 
	
		
			
				|  |  | -    def get_timezone(self):
 | 
	
		
			
				|  |  | -        return timezone(request.context['tz'])
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    '''  Get server date to send '''
 | 
	
		
			
				|  |  | -    def get_server_date(self):
 | 
	
		
			
				|  |  | -        return datetime.now(self.get_timezone()).strftime(DATE_FORMAT)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    ''' Get current user information '''
 | 
	
		
			
				|  |  | -    def get_user(self):
 | 
	
		
			
				|  |  | -        user = request.env.user
 | 
	
		
			
				|  |  | -        return {
 | 
	
		
			
				|  |  | -            'id': user.id,
 | 
	
		
			
				|  |  | -            'name': user.name,
 | 
	
		
			
				|  |  | -            'displayName': user.display_name,
 | 
	
		
			
				|  |  | -            'currency': {
 | 
	
		
			
				|  |  | -                'id': user.company_id.currency_id.id,
 | 
	
		
			
				|  |  | -                'name': user.company_id.currency_id.name,
 | 
	
		
			
				|  |  | -                'displayName': user.company_id.currency_id.display_name,
 | 
	
		
			
				|  |  | -                'symbol': user.company_id.currency_id.symbol
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -            'company': {
 | 
	
		
			
				|  |  | -                'id': user.company_id.id,
 | 
	
		
			
				|  |  | -                'name': user.company_id.name,
 | 
	
		
			
				|  |  | -                'displayName': user.company_id.display_name
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    ''' Get currencies from journals '''
 | 
	
		
			
				|  |  | -    def get_currencies_from_journal(self):
 | 
	
		
			
				|  |  | -        domain = [
 | 
	
		
			
				|  |  | -            ('type', 'in', ['bank', 'cash']),
 | 
	
		
			
				|  |  | -            # ('default_debit_account_id.currency_id', '=', False),
 | 
	
		
			
				|  |  | -            ('active', '=', True)
 | 
	
		
			
				|  |  | -        ]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        currencies = []
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        for j in request.env['account.journal'].search(domain):
 | 
	
		
			
				|  |  | -            c = j.currency or j.company_id.currency_id
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            currencies.append({
 | 
	
		
			
				|  |  | -                'id': c.id,
 | 
	
		
			
				|  |  | -                'name': c.display_name,
 | 
	
		
			
				|  |  | -                'base': c.base,
 | 
	
		
			
				|  |  | -                'symbol': c.symbol,
 | 
	
		
			
				|  |  | -                'position': c.position,
 | 
	
		
			
				|  |  | -                'rateSilent': c.rate_silent,
 | 
	
		
			
				|  |  | -                'decimalSeparator': c.decimal_separator,
 | 
	
		
			
				|  |  | -                'decimalPlaces': c.decimal_places,
 | 
	
		
			
				|  |  | -                'thousandsSeparator': c.thousands_separator
 | 
	
		
			
				|  |  | -            })
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return {c['id']:c for c in currencies}.values()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    '''  all active journals '''
 | 
	
		
			
				|  |  | -    def get_journals(self, type=None):
 | 
	
		
			
				|  |  | -        if (not type[0]):
 | 
	
		
			
				|  |  | -            type= ['bank', 'cash']
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        user = request.env.user
 | 
	
		
			
				|  |  | -        journal = []
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        for store in user.store_ids:
 | 
	
		
			
				|  |  | -            for journalID in store.journal_ids:
 | 
	
		
			
				|  |  | -                if (journalID.type in ['bank', 'cash']):
 | 
	
		
			
				|  |  | -                    journal.append(journalID.id)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        # domain = [('type', 'in', type), ('default_debit_account_id.currency_id', '=', False), ('active', '=', True)]
 | 
	
		
			
				|  |  | -        domain = [('type', 'in', type),('active', '=', True)]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if (journal):
 | 
	
		
			
				|  |  | -            domain.append(('id', 'in', journal ))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return [{
 | 
	
		
			
				|  |  | -            'id': journal.id,
 | 
	
		
			
				|  |  | -            'name': journal.name,
 | 
	
		
			
				|  |  | -            'displayName': journal.display_name,
 | 
	
		
			
				|  |  | -            'code': journal.code,
 | 
	
		
			
				|  |  | -            'cashControl': journal.cash_control,
 | 
	
		
			
				|  |  | -            'type': journal.type,
 | 
	
		
			
				|  |  | -            'storeIds': map(lambda x: x.id, journal.store_ids),
 | 
	
		
			
				|  |  | -            'currency': {
 | 
	
		
			
				|  |  | -                'id': journal.currency.id,
 | 
	
		
			
				|  |  | -                'name': journal.currency.name,
 | 
	
		
			
				|  |  | -                'displayName': journal.currency.display_name
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -            'defaultDebitAccount': {
 | 
	
		
			
				|  |  | -                'id': journal.default_debit_account_id.id,
 | 
	
		
			
				|  |  | -                'name': journal.default_debit_account_id.name,
 | 
	
		
			
				|  |  | -                'displayName': journal.default_debit_account_id.display_name,
 | 
	
		
			
				|  |  | -                'code': journal.default_debit_account_id.code,
 | 
	
		
			
				|  |  | -                'exchange_rate': journal.default_credit_account_id.exchange_rate,
 | 
	
		
			
				|  |  | -                'foreignBalance': journal.default_credit_account_id.foreign_balance,
 | 
	
		
			
				|  |  | -                'reconcile': journal.default_credit_account_id.reconcile,
 | 
	
		
			
				|  |  | -                'debit': journal.default_credit_account_id.debit,
 | 
	
		
			
				|  |  | -                'credit': journal.default_credit_account_id.credit,
 | 
	
		
			
				|  |  | -                'currencyMode': journal.default_credit_account_id.currency_mode,
 | 
	
		
			
				|  |  | -                'companyCurrency': {
 | 
	
		
			
				|  |  | -                    'id': journal.default_credit_account_id.company_currency_id.id,
 | 
	
		
			
				|  |  | -                    'name': journal.default_credit_account_id.company_currency_id.name,
 | 
	
		
			
				|  |  | -                    'displayName': journal.default_credit_account_id.company_currency_id.display_name,
 | 
	
		
			
				|  |  | -                },
 | 
	
		
			
				|  |  | -                'currency': {
 | 
	
		
			
				|  |  | -                    'id': journal.default_credit_account_id.currency_id.id,
 | 
	
		
			
				|  |  | -                    'name': journal.default_credit_account_id.currency_id.name,
 | 
	
		
			
				|  |  | -                    'displayName': journal.default_credit_account_id.currency_id.display_name
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        } for journal in request.env['account.journal'].search(domain, order='id')]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    ''' account.bank.statement '''
 | 
	
		
			
				|  |  | -    def get_account_bank_statement(self, journalIds=None):
 | 
	
		
			
				|  |  | -        if (not journalIds):
 | 
	
		
			
				|  |  | -            return False
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        domain = [('journal_id.id', 'in', journalIds)]
 | 
	
		
			
				|  |  | -        # domain = [('journal_id.id', 'in', journalIds), ('user_id', '=', request.env.user.id)]
 | 
	
		
			
				|  |  | -        return [{
 | 
	
		
			
				|  |  | -            'id': statement.id,
 | 
	
		
			
				|  |  | -            'name': statement.name,
 | 
	
		
			
				|  |  | -            'date': statement.date,
 | 
	
		
			
				|  |  | -            'state': statement.state,
 | 
	
		
			
				|  |  | -            'balanceEnd': statement.balance_end,
 | 
	
		
			
				|  |  | -            'user': {
 | 
	
		
			
				|  |  | -                'id': statement.user_id.id,
 | 
	
		
			
				|  |  | -                'name': statement.user_id.name,
 | 
	
		
			
				|  |  | -                'displayName': statement.user_id.display_name
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -            'userSession': request.env.user.id,
 | 
	
		
			
				|  |  | -            'journal': {
 | 
	
		
			
				|  |  | -                'id': statement.journal_id.id,
 | 
	
		
			
				|  |  | -                'name': statement.journal_id.name,
 | 
	
		
			
				|  |  | -                'displayName': statement.journal_id.display_name,
 | 
	
		
			
				|  |  | -                'code': statement.journal_id.code,
 | 
	
		
			
				|  |  | -                'cashControl': statement.journal_id.cash_control,
 | 
	
		
			
				|  |  | -                'type': statement.journal_id.type,
 | 
	
		
			
				|  |  | -                'currency': {
 | 
	
		
			
				|  |  | -                    'id': statement.journal_id.currency.id,
 | 
	
		
			
				|  |  | -                    'name': statement.journal_id.currency.name,
 | 
	
		
			
				|  |  | -                    'displayName': statement.journal_id.currency.display_name
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -            'line': [{
 | 
	
		
			
				|  |  | -                'id': line.id,
 | 
	
		
			
				|  |  | -                'date': line.date,
 | 
	
		
			
				|  |  | -                'name': line.name,
 | 
	
		
			
				|  |  | -                'ref': line.ref,
 | 
	
		
			
				|  |  | -                'amount': line.amount,
 | 
	
		
			
				|  |  | -                'patner':{
 | 
	
		
			
				|  |  | -                    'id': line.partner_id.id,
 | 
	
		
			
				|  |  | -                    'name': line.partner_id.name,
 | 
	
		
			
				|  |  | -                    'displayName': line.partner_id.display_name
 | 
	
		
			
				|  |  | -                },
 | 
	
		
			
				|  |  | -            } for line in statement.line_ids],
 | 
	
		
			
				|  |  | -            'typeStatement': {
 | 
	
		
			
				|  |  | -                'id': statement.type_statement.id,
 | 
	
		
			
				|  |  | -                'name': statement.type_statement.name,
 | 
	
		
			
				|  |  | -                'code': statement.type_statement.code
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -            'currency':{
 | 
	
		
			
				|  |  | -                'id': statement.currency.id,
 | 
	
		
			
				|  |  | -                'name': statement.currency.display_name,
 | 
	
		
			
				|  |  | -                'base': statement.currency.base,
 | 
	
		
			
				|  |  | -                'symbol': statement.currency.symbol,
 | 
	
		
			
				|  |  | -                'position': statement.currency.position,
 | 
	
		
			
				|  |  | -                'rateSilent': statement.currency.rate_silent,
 | 
	
		
			
				|  |  | -                'decimalSeparator': statement.currency.decimal_separator,
 | 
	
		
			
				|  |  | -                'decimalPlaces': statement.currency.decimal_places,
 | 
	
		
			
				|  |  | -                'thousandsSeparator': statement.currency.thousands_separator
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        } for statement in request.env['account.bank.statement'].search(domain)]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    ''' Configuracion de Caja '''
 | 
	
		
			
				|  |  | -    def get_account_bank_statement_config(self):
 | 
	
		
			
				|  |  | -        'account.bank.statement.config'
 | 
	
		
			
				|  |  | -        return [{
 | 
	
		
			
				|  |  | -            'transfer': {
 | 
	
		
			
				|  |  | -                'userIds': map(lambda x: x.id, config.transfer_user_ids),
 | 
	
		
			
				|  |  | -                'statementIds': map(lambda x: x.id, config.transfer_statement_ids) ,
 | 
	
		
			
				|  |  | -                'negativeAmount': config.transfer_negative_amount
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -            'inputCashBox': {
 | 
	
		
			
				|  |  | -                'userIds': map(lambda x: x.id, config.input_cash_box_user_id),
 | 
	
		
			
				|  |  | -                'statementIds': map(lambda x: x.id, config.input_cash_box_statement_ids)
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -            'outputCashBox': {
 | 
	
		
			
				|  |  | -                'userIds': map(lambda x: x.id, config.output_cash_box_user_id),
 | 
	
		
			
				|  |  | -                'statementIds': map(lambda x: x.id, config.output_cash_box_statement_ids),
 | 
	
		
			
				|  |  | -                'negativeAmount': config.output_negative_amount
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -            'delete': {
 | 
	
		
			
				|  |  | -                'outputUserIds': map(lambda x: x.id, config.delete_output_user_ids),
 | 
	
		
			
				|  |  | -                'inputUserIds': map(lambda x: x.id, config.delete_input_user_ids),
 | 
	
		
			
				|  |  | -                'transferUserIds': map(lambda x: x.id, config.delete_transfer_user_ids)
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -            'statementOpen': config.statement_open_config,
 | 
	
		
			
				|  |  | -            'statementConfirm' :{
 | 
	
		
			
				|  |  | -                'userIds': map(lambda x: x.id, config.statement_confirm_user),
 | 
	
		
			
				|  |  | -                'transferUserIds': map(lambda x: x.id , config.statement_confirm_transfer_user),
 | 
	
		
			
				|  |  | -                'balanceUserIds': map(lambda x: x.id, config.statement_confirm_balance),
 | 
	
		
			
				|  |  | -                'negativeAmountUserIds': map(lambda x: x.id, config.statement_confirm_negative_amount)
 | 
	
		
			
				|  |  | -            },
 | 
	
		
			
				|  |  | -            'statementCancelUserIds': map(lambda x: x.id, config.statement_cancel_user),
 | 
	
		
			
				|  |  | -            'statementUnlinkUserIds': map(lambda x: x.id, config.statement_unlink_user)
 | 
	
		
			
				|  |  | -        } for config in request.env['account.bank.statement.config'].search([('active', '=', True)],order='id')]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      ''' Make JSON response to send '''
 | 
	
		
			
				|  |  |      def make_response(self, data=None, status=200):
 | 
	
		
			
				|  |  |          return Response(json.dumps(data), status=status, content_type='application/json')
 | 
	
	
		
			
				|  | @@ -247,9 +37,9 @@ class Statement(http.Controller):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          return Response(contents, status=status, headers=headers, content_type='application/json')
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    ''' Logger info '''
 | 
	
		
			
				|  |  | -    def make_info_log(self, log):
 | 
	
		
			
				|  |  | -        LOGGER.info('\033[1;34m[INFO] --> \033[m{}'.format(log))
 | 
	
		
			
				|  |  | +    # ''' Logger info '''
 | 
	
		
			
				|  |  | +    # def make_info_log(self, log):
 | 
	
		
			
				|  |  | +    #     LOGGER.info('\033[1;34m[INFO] --> \033[m{}'.format(log))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      '''
 | 
	
		
			
				|  |  |          ██ ███    ██ ██ ████████
 | 
	
	
		
			
				|  | @@ -262,20 +52,30 @@ class Statement(http.Controller):
 | 
	
		
			
				|  |  |      def init_bank_statement(self,**kw):
 | 
	
		
			
				|  |  |          from account_bank_statement_type import get_account_bank_statement_type
 | 
	
		
			
				|  |  |          from res_store import get_res_store
 | 
	
		
			
				|  |  | -        from res_users import get_res_users
 | 
	
		
			
				|  |  | -        self.make_info_log('Preparing data to {}'.format(kw.get('mode')))
 | 
	
		
			
				|  |  | +        from res_users import get_res_users, get_user
 | 
	
		
			
				|  |  | +        from server_datetime import get_date
 | 
	
		
			
				|  |  | +        from res_partner import get_res_partner
 | 
	
		
			
				|  |  | +        from account_bank_statement_config import get_account_bank_statement_config
 | 
	
		
			
				|  |  | +        from account_journal import get_currencies_from_journal, get_journals
 | 
	
		
			
				|  |  | +        from account_bank_statement import get_account_bank_statement
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        make_info_log('Preparing data to {}'.format(kw.get('mode')))
 | 
	
		
			
				|  |  | +        # self.make_info_log('Preparing data to {}'.format(kw.get('mode')))
 | 
	
		
			
				|  |  |          store = get_res_store(kw.get('mode'))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        # from eiru_logging import make_info_log
 | 
	
		
			
				|  |  | +        # make_info_log('GET Timezone')
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          return self.make_gzip_response({
 | 
	
		
			
				|  |  | -            'date': self.get_server_date(),
 | 
	
		
			
				|  |  | -            'user': self.get_user(),
 | 
	
		
			
				|  |  | -            'currencies': self.get_currencies_from_journal(),
 | 
	
		
			
				|  |  | -            'journals': self.get_journals([kw.get('mode')]),
 | 
	
		
			
				|  |  | -            # 'statement': self.get_account_bank_statement(map(lambda x: x['id'], journals[0])),
 | 
	
		
			
				|  |  | -            'statement': self.get_account_bank_statement(store['journalIds']),
 | 
	
		
			
				|  |  | -            'statementConfig' : self.get_account_bank_statement_config(),
 | 
	
		
			
				|  |  | +            'date': get_date(),
 | 
	
		
			
				|  |  | +            'user': get_user(),
 | 
	
		
			
				|  |  | +            'resUsers': get_res_users(store['userIds']),
 | 
	
		
			
				|  |  |              'statementType': get_account_bank_statement_type(),
 | 
	
		
			
				|  |  | -            'resUsers': get_res_users(store['userIds'])
 | 
	
		
			
				|  |  | +            'resPartners': get_res_partner(),
 | 
	
		
			
				|  |  | +            'statementConfig': get_account_bank_statement_config(),
 | 
	
		
			
				|  |  | +            'currencies': get_currencies_from_journal(),
 | 
	
		
			
				|  |  | +            'journals': get_journals([kw.get('mode')]),
 | 
	
		
			
				|  |  | +            'statement': get_account_bank_statement(store['journalIds']),
 | 
	
		
			
				|  |  |          })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      '''
 |