main.py 9.5 KB

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