main.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. # -*- coding: utf-8 -*-
  2. from openerp import http
  3. from openerp.http import request
  4. from res_currency import check_base_currency
  5. from res_config import get_pos_config, save_pos_config
  6. from server_datetime import get_datetime, get_date
  7. from res_users import get_current_user
  8. from account_journal import get_journals, get_currencies_from_journals, get_currency
  9. from res_partner import get_customers, create_customer
  10. from product_template import get_products, create_product
  11. from account_payment_term import get_payment_terms
  12. from res_bank import get_banks
  13. from res_bank_payment_type import get_bank_payment_types
  14. from res_bank_cheque_type import get_cheque_types
  15. from sale_order import create_sale_from_cart, confirm_sale_order
  16. from account_invoice import create_invoice, create_invoice_move_lines, number_invoice, close_invoice
  17. from account_move import create_account_move
  18. from account_voucher import create_account_voucher
  19. from account_bank_statement import create_bank_statement
  20. from res_bank_payment import create_bank_payment_statement
  21. from res_store import get_stores
  22. from http_response import make_gzip_response
  23. import logging
  24. LOGGER = logging.getLogger(__name__)
  25. class PosSales(http.Controller):
  26. #################
  27. # ╦ ╔═╗╔═╗ #
  28. # ║ ║ ║║ ╦ #
  29. # ╩═╝╚═╝╚═╝ #
  30. #################
  31. def make_info_log(self, log):
  32. LOGGER.info('\033[1;34m[INFO] --> \033[m{}'.format(log))
  33. #####################################
  34. # ╦╔╗╔╦╔╦╗ ╔═╗╦═╗╔═╗╔═╗╔═╗╔═╗╔═╗ #
  35. # ║║║║║ ║ ╠═╝╠╦╝║ ║║ ║╣ ╚═╗╚═╗ #
  36. # ╩╝╚╝╩ ╩ ╩ ╩╚═╚═╝╚═╝╚═╝╚═╝╚═╝ #
  37. #####################################
  38. @http.route('/eiru_sales/init', auth='user', methods=['GET'], cors='*')
  39. def _init_sale(self, **kw):
  40. self.make_info_log('Sending JSON response')
  41. check_base_currency()
  42. config = get_pos_config()
  43. data = {
  44. 'settings': config,
  45. 'date': get_datetime(),
  46. 'user': get_current_user(),
  47. 'currencies': get_currencies_from_journals(),
  48. 'journals': get_journals(),
  49. 'customers': get_customers(image_type=config.get('imageType')),
  50. 'products': get_products(image_type=config.get('imageType')),
  51. 'paymentTerms': get_payment_terms(),
  52. 'banks': get_banks(),
  53. 'bankPaymentTypes': get_bank_payment_types(),
  54. 'chequeTypes': get_cheque_types(),
  55. 'stores': get_stores()
  56. }
  57. return make_gzip_response(data)
  58. #####################################################################
  59. # ╔═╗╔═╗╔╦╗ ╔═╗╦═╗╔═╗╔╦╗╦ ╦╔═╗╔╦╗╔═╗ ╔╦╗╔═╗╔╦╗╔═╗ ╔═╗╔╗╔╦ ╦ ╦ #
  60. # ║ ╦║╣ ║ ╠═╝╠╦╝║ ║ ║║║ ║║ ║ ╚═╗ ║║╠═╣ ║ ╠═╣ ║ ║║║║║ ╚╦╝ #
  61. # ╚═╝╚═╝ ╩ ╩ ╩╚═╚═╝═╩╝╚═╝╚═╝ ╩ ╚═╝ ═╩╝╩ ╩ ╩ ╩ ╩ ╚═╝╝╚╝╩═╝╩ #
  62. #####################################################################
  63. @http.route('/eiru_sales/get_images', auth='user', methods=['GET'], cors='*')
  64. def _get_images_only(self, **kw):
  65. image_type = str(get_pos_config().get('imageType'))
  66. return make_gzip_response({
  67. 'customers': get_customers(image_type=image_type),
  68. 'products': get_products(image_type=image_type)
  69. })
  70. #################################################################################################
  71. # ╔═╗╦═╗╔═╗╔═╗╔╦╗╔═╗ ╔═╗╦ ╦╔═╗╔╦╗╔═╗╔╦╗╔═╗╦═╗ ╔═╗╔╗╔╔╦╗ ╦═╗╔═╗╔╦╗╦ ╦╦═╗╔╗╔ ╔╦╗╔═╗╔╦╗╔═╗ #
  72. # ║ ╠╦╝║╣ ╠═╣ ║ ║╣ ║ ║ ║╚═╗ ║ ║ ║║║║║╣ ╠╦╝ ╠═╣║║║ ║║ ╠╦╝║╣ ║ ║ ║╠╦╝║║║ ║║╠═╣ ║ ╠═╣ #
  73. # ╚═╝╩╚═╚═╝╩ ╩ ╩ ╚═╝ ╚═╝╚═╝╚═╝ ╩ ╚═╝╩ ╩╚═╝╩╚═ ╩ ╩╝╚╝═╩╝ ╩╚═╚═╝ ╩ ╚═╝╩╚═╝╚╝ ═╩╝╩ ╩ ╩ ╩ ╩ #
  74. #################################################################################################
  75. @http.route('/eiru_sales/create_customer', type='json', auth='user', methods=['POST'], cors='*')
  76. def _create_customer(self, **kw):
  77. self.make_info_log('Creating customer')
  78. return create_customer(kw)
  79. #############################################
  80. # ╔═╗╔═╗╦ ╦╔═╗ ╔═╗╔═╗╔╦╗╔╦╗╦╔╗╔╔═╗╔═╗ #
  81. # ╚═╗╠═╣╚╗╔╝║╣ ╚═╗║╣ ║ ║ ║║║║║ ╦╚═╗ #
  82. # ╚═╝╩ ╩ ╚╝ ╚═╝ ╚═╝╚═╝ ╩ ╩ ╩╝╚╝╚═╝╚═╝ #
  83. #############################################
  84. @http.route('/eiru_sales/save_settings', type='json', auth='user', methods=['POST'], cors='*')
  85. def _save_config(self, **kw):
  86. self.make_info_log('save settings')
  87. return save_pos_config(kw)
  88. #############################################################################################
  89. # ╔═╗╦═╗╔═╗╔═╗╔╦╗╔═╗ ╔═╗╦═╗╔═╗╔╦╗╦ ╦╔═╗╔╦╗ ╔═╗╔╗╔╔╦╗ ╦═╗╔═╗╔╦╗╦ ╦╦═╗╔╗╔ ╔╦╗╔═╗╔╦╗╔═╗ #
  90. # ║ ╠╦╝║╣ ╠═╣ ║ ║╣ ╠═╝╠╦╝║ ║ ║║║ ║║ ║ ╠═╣║║║ ║║ ╠╦╝║╣ ║ ║ ║╠╦╝║║║ ║║╠═╣ ║ ╠═╣ #
  91. # ╚═╝╩╚═╚═╝╩ ╩ ╩ ╚═╝ ╩ ╩╚═╚═╝═╩╝╚═╝╚═╝ ╩ ╩ ╩╝╚╝═╩╝ ╩╚═╚═╝ ╩ ╚═╝╩╚═╝╚╝ ═╩╝╩ ╩ ╩ ╩ ╩ #
  92. #############################################################################################
  93. @http.route('/eiru_sales/create_product', type='json', auth='user', methods=['POST'], cors='*')
  94. def _create_product(self, **kw):
  95. return create_product(kw)
  96. #############################################
  97. # ╔═╗╦╔╗╔╦╔═╗╦ ╦ ╔═╗╦═╗╔═╗╔═╗╔═╗╔═╗╔═╗ #
  98. # ╠╣ ║║║║║╚═╗╠═╣ ╠═╝╠╦╝║ ║║ ║╣ ╚═╗╚═╗ #
  99. # ╚ ╩╝╚╝╩╚═╝╩ ╩ ╩ ╩╚═╚═╝╚═╝╚═╝╚═╝╚═╝ #
  100. #############################################
  101. @http.route('/eiru_sales/finish', type='json', auth='user', methods=['POST'], cors='*')
  102. def _finish(self, **kw):
  103. self.make_info_log('Finishing...')
  104. # Parameters
  105. date_now = get_date()
  106. mode = kw.get('mode', 'sale')
  107. journal_id = kw.get('journalId', None)
  108. customer_id = kw.get('customerId', None)
  109. cart_items = kw.get('items', [])
  110. payment_term_id = kw.get('paymentTermId', None)
  111. payment = float(kw.get('payment'))
  112. payment_method = kw.get('paymentMethod', 'Efectivo')
  113. bank_payment_data = kw.get('bankPaymentData', {})
  114. '''
  115. ╔═╗╦╔╗╔╦╔═╗╦ ╦ ╔╗ ╦ ╦╔╦╗╔═╗╔═╗╔╦╗ ╔═╗╔═╗╔═╗ ╔═╗╦═╗╔═╗╔═╗╔═╗╔╦╗╦ ╦╦═╗╔═╗
  116. ╠╣ ║║║║║╚═╗╠═╣ ╠╩╗║ ║ ║║║ ╦║╣ ║ ╠═╝║ ║╚═╗ ╠═╝╠╦╝║ ║║ ║╣ ║║║ ║╠╦╝║╣
  117. ╚ ╩╝╚╝╩╚═╝╩ ╩ ╚═╝╚═╝═╩╝╚═╝╚═╝ ╩ ╩ ╚═╝╚═╝ ╩ ╩╚═╚═╝╚═╝╚═╝═╩╝╚═╝╩╚═╚═╝
  118. '''
  119. def finish_budget_pos(journal_id, customer_id, cart_items, date_now, currency_id, payment_term_id):
  120. # Get currency
  121. currency_id = get_currency(journal_id)
  122. self.make_info_log('[OK] Getting journal')
  123. # Create sale order
  124. sale_order = create_sale_from_cart(customer_id, cart_items, date_now, currency_id, payment_term_id)
  125. self.make_info_log('[OK] Creating sale order')
  126. return sale_order.id
  127. '''
  128. ╔═╗╦╔╗╔╦╔═╗╦ ╦ ╔═╗╔═╗╦ ╔═╗ ╔═╗╔═╗╔═╗ ╔═╗╦═╗╔═╗╔═╗╔═╗╔╦╗╦ ╦╦═╗╔═╗
  129. ╠╣ ║║║║║╚═╗╠═╣ ╚═╗╠═╣║ ║╣ ╠═╝║ ║╚═╗ ╠═╝╠╦╝║ ║║ ║╣ ║║║ ║╠╦╝║╣
  130. ╚ ╩╝╚╝╩╚═╝╩ ╩ ╚═╝╩ ╩╩═╝╚═╝ ╩ ╚═╝╚═╝ ╩ ╩╚═╚═╝╚═╝╚═╝═╩╝╚═╝╩╚═╚═╝
  131. '''
  132. def finish_sale_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, payment, payment_method, bank_payment_data):
  133. # Create budget
  134. sale_order_id = finish_budget_pos(journal_id, customer_id, cart_items, date_now, currency_id, payment_term_id)
  135. # Confirm sale
  136. confirm_sale_order(sale_order_id)
  137. self.make_info_log('[OK] Confirm sale order')
  138. # Create invoice
  139. invoice = create_invoice(sale_order_id, currency_id, date_now)
  140. self.make_info_log('[OK] Creating invoice')
  141. # Create invoice move lines
  142. invoice_move_lines = create_invoice_move_lines(invoice.id, payment, date_now)
  143. self.make_info_log('[OK] Creating invoice move lines')
  144. # Create account move
  145. account_move = create_account_move(invoice.id, invoice_move_lines)
  146. self.make_info_log('[OK] Creating account move')
  147. # Number invoice
  148. number_invoice(invoice.id)
  149. self.make_info_log('[OK] Number invoice')
  150. # Create account voucher
  151. account_voucher = create_account_voucher(account_move.id, journal_id, currency_id, payment)
  152. self.make_info_log('[OK] Creating account voucher')
  153. # Close invoice
  154. close_invoice(invoice.id)
  155. self.make_info_log('[OK] Closing invoice')
  156. # Create bank statement
  157. create_bank_statement(account_voucher.id, date_now)
  158. self.make_info_log('[OK] Creating account bank statement')
  159. # Create bank payment statement
  160. if payment_method == 'Banco':
  161. create_bank_payment_statement(bank_payment_data, invoice.id, account_voucher.id)
  162. self.make_info_log('[OK] Creating bank payment statement')
  163. return True
  164. '''
  165. ╔═╗╦═╗╔═╗╔═╗╔═╗╔═╗╔═╗ ╔═╗╦╔╗╔╦╔═╗╦ ╦ ╔╦╗╔═╗╔═╗╦╔═╗╦╔═╗╔╗╔
  166. ╠═╝╠╦╝║ ║║ ║╣ ╚═╗╚═╗ ╠╣ ║║║║║╚═╗╠═╣ ║║║╣ ║ ║╚═╗║║ ║║║║
  167. ╩ ╩╚═╚═╝╚═╝╚═╝╚═╝╚═╝ ╚ ╩╝╚╝╩╚═╝╩ ╩ ═╩╝╚═╝╚═╝╩╚═╝╩╚═╝╝╚╝
  168. '''
  169. if mode == 'budget':
  170. finish_budget_pos(journal_id, customer_id, cart_items, date_now, currency_id, payment_term_id)
  171. if mode == 'sale':
  172. finish_sale_pos(journal_id, customer_id, cart_items, date_now, payment_term_id, payment, payment_method, bank_payment_data)
  173. if mode == 'product_picking':
  174. pass
  175. if mode == 'payment':
  176. pass
  177. if mode == 'product_delivery':
  178. pass
  179. return {
  180. 'process': True,
  181. 'date': get_datetime()
  182. }