main.py 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. # -*- coding: utf-8 -*-
  2. from openerp import http
  3. from openerp.http import request
  4. from werkzeug.wrappers import Response
  5. from werkzeug.datastructures import Headers
  6. from datetime import datetime
  7. from StringIO import StringIO
  8. from gzip import GzipFile
  9. from StringIO import StringIO as IO
  10. import simplejson as json
  11. import gzip
  12. import logging
  13. LOGGER = logging.getLogger(__name__)
  14. class PaymentsSales(http.Controller):
  15. '''
  16. Get server date
  17. '''
  18. def get_server_date(self):
  19. return datetime.now().strftime('%y-%m-%d')
  20. '''
  21. Get partner customer
  22. '''
  23. def get_user(self):
  24. user = request.env.user
  25. return {
  26. 'id': user.id,
  27. 'name': user.name,
  28. 'displayName': user.display_name,
  29. 'company': {
  30. 'id': user.company_id.id,
  31. 'name': user.company_id.name
  32. },
  33. 'currency': {
  34. 'id': user.company_id.currency_id.id,
  35. 'name': user.company_id.currency_id.name,
  36. 'displayName': user.company_id.currency_id.display_name,
  37. 'symbol': user.company_id.currency_id.symbol
  38. }
  39. }
  40. '''
  41. Get partner customer
  42. '''
  43. def get_customers(self):
  44. domain = [('customer', '=', True), ('active', '=', True), ('credit', '>', 0)]
  45. partners = []
  46. for customer in request.env['res.partner'].search(domain):
  47. invoices = []
  48. partner_invoice = []
  49. for invoice_ids in customer.invoice_ids:
  50. if invoice_ids.state == 'open':
  51. partner_invoice.append(invoice_ids.id)
  52. if customer.is_company == True:
  53. for child in customer.child_ids:
  54. for invoice_ids in child.invoice_ids:
  55. if invoice_ids.state == 'open':
  56. partner_invoice.append(invoice_ids.id)
  57. # for invoice in request.env['account.invoice'].browse(partner_invoice):
  58. for invoice in request.env['account.invoice'].search([('id', 'in', partner_invoice),('state', '=', 'open')]):
  59. movelines = []
  60. moves = []
  61. currency_symbol = ""
  62. for move in invoice.move_id:
  63. for moveline in move.line_id:
  64. if moveline.amount_residual > 0 and moveline.state != "draft" and moveline.credit <= 0:
  65. movelines.append({
  66. 'id': moveline.id,
  67. 'amountResidual': moveline.amount_residual,
  68. 'credit': moveline.credit,
  69. 'debit': moveline.debit,
  70. 'dateMaturity': moveline.date_maturity,
  71. 'invoice': invoice.id
  72. })
  73. invoices.append({
  74. 'id': invoice.id,
  75. 'number': invoice.number,
  76. 'dateInvoice': invoice.date_invoice,
  77. 'amountTotal': invoice.amount_total,
  78. 'residual': invoice.residual,
  79. 'moveLines': movelines,
  80. 'currency' : {
  81. 'id': invoice.currency_id.id,
  82. 'name': invoice.currency_id.name,
  83. 'displayName': invoice.currency_id.display_name,
  84. 'symbol': invoice.currency_id.symbol,
  85. 'rateSilent': invoice.currency_id.rate_silent,
  86. 'thousandsSeparator': invoice.currency_id.thousands_separator,
  87. 'decimalSeparator': invoice.currency_id.decimal_separator,
  88. 'decimalPlaces': invoice.currency_id.decimal_places
  89. }
  90. })
  91. partners.append({
  92. 'id': customer.id,
  93. 'name': customer.name,
  94. 'displayName': customer.display_name,
  95. 'ruc': customer.ruc,
  96. 'imageMedium': customer.image_medium,
  97. 'phone': customer.phone,
  98. 'mobile': customer.mobile,
  99. 'email': customer.email,
  100. 'credit': customer.credit,
  101. 'creditLimit': customer.credit_limit,
  102. 'invoices': invoices
  103. })
  104. return partners
  105. '''
  106. Get Journal
  107. '''
  108. def get_journals(self):
  109. domain =[('active', '=', True),('type', 'in',['bank', 'cash'])]
  110. paymentsJournals = []
  111. for journal in request.env['account.journal'].search(domain, order="id"):
  112. if not (journal.store_ids >= request.env.user.store_ids):
  113. continue
  114. paymentsJournals.append({
  115. 'id': journal.id,
  116. 'name': journal.name,
  117. 'displayName': journal.display_name,
  118. 'code': journal.code,
  119. 'cashControl': journal.cash_control,
  120. 'type': journal.type,
  121. 'currency': {
  122. 'id': journal.currency.id,
  123. 'name': journal.currency.name,
  124. 'displayName': journal.currency.display_name,
  125. 'symbol': journal.currency.symbol,
  126. 'rateSilent': journal.currency.rate_silent
  127. },
  128. 'defaultCreditAccount':{
  129. 'id': journal.default_credit_account_id.id,
  130. 'name': journal.default_credit_account_id.name,
  131. 'displayName': journal.default_credit_account_id.display_name,
  132. 'code': journal.default_credit_account_id.code,
  133. 'exchangeRate': journal.default_credit_account_id.exchange_rate,
  134. 'foreignBalance': journal.default_credit_account_id.foreign_balance,
  135. 'reconcile': journal.default_credit_account_id.reconcile,
  136. 'debit': journal.default_credit_account_id.debit,
  137. 'credit': journal.default_credit_account_id.credit,
  138. 'currencyMode': journal.default_credit_account_id.currency_mode,
  139. 'companyCurrency':{
  140. 'id': journal.default_credit_account_id.company_currency_id.id,
  141. 'name': journal.default_credit_account_id.company_currency_id.name,
  142. 'displayName': journal.default_credit_account_id.company_currency_id.display_name,
  143. 'symbol': journal.default_credit_account_id.company_currency_id.symbol,
  144. 'rateSilent': journal.default_credit_account_id.company_currency_id.rate_silent
  145. },
  146. 'currency':{
  147. 'id': journal.default_credit_account_id.currency_id.id,
  148. 'name': journal.default_credit_account_id.currency_id.name,
  149. 'displayName': journal.default_credit_account_id.currency_id.display_name,
  150. 'symbol': journal.default_credit_account_id.currency_id.symbol,
  151. 'rateSilent': journal.default_credit_account_id.currency_id.rate_silent
  152. },
  153. }
  154. })
  155. return paymentsJournals
  156. '''
  157. Get Currency
  158. '''
  159. def get_currency(self):
  160. return [{
  161. 'id': currency.id,
  162. 'name': currency.name,
  163. 'displayName': currency.display_name,
  164. 'base': currency.base,
  165. 'accuracy': currency.accuracy,
  166. 'rateSilent': currency.rate_silent,
  167. 'rounding': currency.rounding,
  168. 'symbol': currency.symbol,
  169. 'position': currency.position,
  170. 'thousandsSeparator': currency.thousands_separator,
  171. 'decimalSeparator': currency.decimal_separator,
  172. 'decimalPlaces': currency.decimal_places
  173. } for currency in request.env['res.currency'].search([('active', '=', True)])]
  174. '''
  175. Make JSON response
  176. '''
  177. def make_json_response(self, data=None, status=200):
  178. return Response(json.dumps(data), status=status, content_type='application/json')
  179. '''
  180. Make GZIP to JSON response
  181. '''
  182. def make_gzip_response(self, data=None, status=200):
  183. gzip_buffer = IO()
  184. with GzipFile(mode='wb', compresslevel=9, fileobj=gzip_buffer) as gzip_file:
  185. gzip_file.write(json.dumps(data))
  186. contents = gzip_buffer.getvalue()
  187. gzip_buffer.close()
  188. headers = Headers()
  189. headers.add('Content-Encoding', 'gzip')
  190. headers.add('Vary', 'Accept-Encoding')
  191. headers.add('Content-Length', len(contents))
  192. return Response(contents, status=status, headers=headers, content_type='application/json')
  193. '''
  194. Logger Info
  195. '''
  196. def make_info_log(self, log):
  197. LOGGER.info(log)
  198. '''
  199. New Payments resource router
  200. '''
  201. @http.route('/eiru_payments/init', auth='user', methods=['GET'], cors='*')
  202. def init_payments(self, **kw):
  203. self.make_info_log('Sending JSON response')
  204. return self.make_gzip_response({
  205. 'date': self.get_server_date(),
  206. 'user': self.get_user(),
  207. 'customers': self.get_customers(),
  208. 'journals': self.get_journals(),
  209. 'currencies': self.get_currency()
  210. })