123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- # -*- coding: utf-8 -*-
- from openerp import http
- from openerp.http import request
- from werkzeug.wrappers import Response
- from werkzeug.datastructures import Headers
- from datetime import datetime
- from StringIO import StringIO
- from gzip import GzipFile
- from StringIO import StringIO as IO
- import simplejson as json
- import gzip
- import logging
- LOGGER = logging.getLogger(__name__)
- class PaymentsSales(http.Controller):
- '''
- Get server date
- '''
- def get_server_date(self):
- return datetime.now().strftime('%y-%m-%d')
- '''
- Get partner customer
- '''
- def get_user(self):
- user = request.env.user
- return {
- 'id': user.id,
- 'name': user.name,
- 'displayName': user.display_name,
- 'company': {
- 'id': user.company_id.id,
- 'name': user.company_id.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,
- 'rateSilent': user.company_id.currency_id.rate_silent,
- 'thousandsSeparator': user.company_id.currency_id.thousands_separator,
- 'decimalSeparator': user.company_id.currency_id.decimal_separator,
- 'decimalPlaces': user.company_id.currency_id.decimal_places
- }
- }
- '''
- Get partner customer
- '''
- def get_customers(self):
- domain = [('customer', '=', True), ('active', '=', True), ('credit', '>', 0)]
- partners = []
- for customer in request.env['res.partner'].search(domain):
- invoices = []
- partner_invoice = []
- for invoice_ids in customer.invoice_ids:
- if invoice_ids.state == 'open':
- partner_invoice.append(invoice_ids.id)
- if customer.is_company == True:
- for child in customer.child_ids:
- for invoice_ids in child.invoice_ids:
- if invoice_ids.state == 'open':
- partner_invoice.append(invoice_ids.id)
- # for invoice in request.env['account.invoice'].browse(partner_invoice):
- for invoice in request.env['account.invoice'].search([('id', 'in', partner_invoice),('state', '=', 'open')]):
- movelines = []
- moves = []
- currency_symbol = ""
- for move in invoice.move_id:
- for moveline in move.line_id:
- if moveline.amount_residual > 0 and moveline.state != "draft" and moveline.credit <= 0:
- movelines.append({
- 'id': moveline.id,
- 'amountResidual': moveline.amount_residual,
- 'credit': moveline.credit,
- 'debit': moveline.debit,
- 'dateMaturity': moveline.date_maturity,
- 'invoice': invoice.id
- })
- invoices.append({
- 'id': invoice.id,
- 'number': invoice.number,
- 'dateInvoice': invoice.date_invoice,
- 'amountTotal': invoice.amount_total,
- 'residual': invoice.residual,
- 'moveLines': movelines,
- 'currency' : {
- 'id': invoice.currency_id.id,
- 'name': invoice.currency_id.name,
- 'displayName': invoice.currency_id.display_name,
- 'symbol': invoice.currency_id.symbol,
- 'rateSilent': invoice.currency_id.rate_silent,
- 'thousandsSeparator': invoice.currency_id.thousands_separator,
- 'decimalSeparator': invoice.currency_id.decimal_separator,
- 'decimalPlaces': invoice.currency_id.decimal_places
- }
- })
- partners.append({
- 'id': customer.id,
- 'name': customer.name,
- 'displayName': customer.display_name,
- 'ruc': customer.ruc,
- 'imageMedium': customer.image_medium,
- 'phone': customer.phone,
- 'mobile': customer.mobile,
- 'email': customer.email,
- 'credit': customer.credit,
- 'creditLimit': customer.credit_limit,
- 'invoices': invoices
- })
- return partners
- '''
- Get Journal
- '''
- def get_journals(self):
- domain =[('active', '=', True),('type', 'in',['bank', 'cash'])]
- paymentsJournals = []
- for journal in request.env['account.journal'].search(domain, order="id"):
- if not (journal.store_ids >= request.env.user.store_ids):
- continue
- paymentsJournals.append({
- 'id': journal.id,
- 'name': journal.name,
- 'displayName': journal.display_name,
- 'code': journal.code,
- 'cashControl': journal.cash_control,
- 'type': journal.type,
- 'currency': {
- 'id': journal.currency.id,
- 'name': journal.currency.name,
- 'displayName': journal.currency.display_name,
- 'symbol': journal.currency.symbol,
- 'rateSilent': journal.currency.rate_silent
- },
- 'defaultCreditAccount':{
- 'id': journal.default_credit_account_id.id,
- 'name': journal.default_credit_account_id.name,
- 'displayName': journal.default_credit_account_id.display_name,
- 'code': journal.default_credit_account_id.code,
- 'exchangeRate': 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,
- 'symbol': journal.default_credit_account_id.company_currency_id.symbol,
- 'rateSilent': journal.default_credit_account_id.company_currency_id.rate_silent
- },
- '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,
- 'symbol': journal.default_credit_account_id.currency_id.symbol,
- 'rateSilent': journal.default_credit_account_id.currency_id.rate_silent
- },
- }
- })
- return paymentsJournals
- '''
- Get Currency
- '''
- def get_currency(self):
- return [{
- 'id': currency.id,
- 'name': currency.name,
- 'displayName': currency.display_name,
- 'base': currency.base,
- 'accuracy': currency.accuracy,
- 'rateSilent': currency.rate_silent,
- 'rounding': currency.rounding,
- 'symbol': currency.symbol,
- 'position': currency.position,
- 'thousandsSeparator': currency.thousands_separator,
- 'decimalSeparator': currency.decimal_separator,
- 'decimalPlaces': currency.decimal_places
- } for currency in request.env['res.currency'].search([('active', '=', True)])]
- '''
- Make JSON response
- '''
- def make_json_response(self, data=None, status=200):
- return Response(json.dumps(data), status=status, content_type='application/json')
- '''
- Make GZIP to JSON response
- '''
- def make_gzip_response(self, data=None, status=200):
- gzip_buffer = IO()
- with GzipFile(mode='wb', compresslevel=9, fileobj=gzip_buffer) as gzip_file:
- gzip_file.write(json.dumps(data))
- contents = gzip_buffer.getvalue()
- gzip_buffer.close()
- headers = Headers()
- headers.add('Content-Encoding', 'gzip')
- headers.add('Vary', 'Accept-Encoding')
- headers.add('Content-Length', len(contents))
- return Response(contents, status=status, headers=headers, content_type='application/json')
- '''
- Logger Info
- '''
- def make_info_log(self, log):
- LOGGER.info(log)
- '''
- New Payments resource router
- '''
- @http.route('/eiru_payments/init', auth='user', methods=['GET'], cors='*')
- def init_payments(self, **kw):
- self.make_info_log('Sending JSON response')
- return self.make_gzip_response({
- 'date': self.get_server_date(),
- 'user': self.get_user(),
- 'customers': self.get_customers()
- # 'journals': self.get_journals(),
- # 'currencies': self.get_currency()
- })
|