main.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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. def make_info_log(self, log):
  29. LOGGER.info('\033[1;34m[INFO] --> \033[m{}'.format(log))
  30. '''
  31. New purchase resource route
  32. '''
  33. @http.route('/eiru_sales/init', auth='user', methods=['GET'], cors='*')
  34. def _init_sale(self, **kw):
  35. self.make_info_log('Sending JSON response')
  36. check_base_currency()
  37. config = get_pos_config()
  38. data = {
  39. 'settings': config,
  40. 'date': get_datetime(),
  41. 'user': get_current_user(),
  42. 'currencies': get_currencies_from_journals(),
  43. 'journals': get_journals(),
  44. 'customers': get_customers(image_type=config.get('imageType')),
  45. 'products': get_products(image_type=config.get('imageType')),
  46. 'paymentTerms': get_payment_terms(),
  47. 'banks': get_banks(),
  48. 'bankPaymentTypes': get_bank_payment_types(),
  49. 'chequeTypes': get_cheque_types(),
  50. 'stores': get_stores()
  51. }
  52. return make_gzip_response(data)
  53. '''
  54. Get products data only
  55. '''
  56. @http.route('/eiru_sales/get_images', auth='user', methods=['GET'], cors='*')
  57. def _get_images_only(self, **kw):
  58. image_type = str(get_pos_config().get('imageType'))
  59. return make_gzip_response({
  60. 'customers': get_customers(image_type=image_type),
  61. 'products': get_products(image_type=image_type)
  62. })
  63. '''
  64. Create customer and return data
  65. '''
  66. @http.route('/eiru_sales/create_customer', type='json', auth='user', methods=['POST'], cors='*')
  67. def _create_customer(self, **kw):
  68. self.make_info_log('Creating customer')
  69. return create_customer(kw)
  70. '''
  71. Save settings
  72. '''
  73. @http.route('/eiru_sales/save_settings', type='json', auth='user', methods=['POST'], cors='*')
  74. def _save_config(self, **kw):
  75. self.make_info_log('save settings')
  76. return save_pos_config(kw)
  77. '''
  78. Create product and return data
  79. '''
  80. @http.route('/eiru_sales/create_product', type='json', auth='user', methods=['POST'], cors='*')
  81. def _create_product(self, **kw):
  82. return create_product(kw)
  83. '''
  84. Process sale
  85. '''
  86. @http.route('/eiru_sales/process_sale', type='json', auth='user', methods=['POST'], cors='*')
  87. def _process_sale(self, **kw):
  88. self.make_info_log('Processing sale...')
  89. date_now = get_date()
  90. journal_id = kw.get('journalId', None)
  91. customer_id = kw.get('customerId', None)
  92. cart_items = kw.get('items', [])
  93. payment_term_id = kw.get('paymentTermId', None)
  94. payment = float(kw.get('payment'))
  95. bank_payment_data = kw.get('bankPaymentData', {})
  96. # Get currency
  97. currency_id = get_currency(journal_id)
  98. self.make_info_log('[OK] Getting journal')
  99. # Create sale order
  100. sale_order = create_sale_from_cart(customer_id, cart_items, date_now, currency_id, payment_term_id)
  101. self.make_info_log('[OK] Creating sale order')
  102. # Check if budget
  103. if kw.get('mode', 'sale') != 'sale':
  104. return {
  105. 'process': True
  106. }
  107. # Confirm sale
  108. confirm_sale_order(sale_order.id)
  109. self.make_info_log('[OK] Confirm sale order')
  110. # Create invoice
  111. invoice = create_invoice(sale_order.id, currency_id, date_now)
  112. self.make_info_log('[OK] Creating invoice')
  113. # Create invoice move lines
  114. invoice_move_lines = create_invoice_move_lines(invoice.id, payment, date_now)
  115. self.make_info_log('[OK] Creating invoice move lines')
  116. # Create account move
  117. account_move = create_account_move(invoice.id, invoice_move_lines)
  118. self.make_info_log('[OK] Creating account move')
  119. # Number invoice
  120. number_invoice(invoice.id)
  121. self.make_info_log('[OK] Number invoice')
  122. # Create account voucher
  123. account_voucher = create_account_voucher(account_move.id, journal_id, currency_id, payment)
  124. self.make_info_log('[OK] Creating account voucher')
  125. # Close invoice
  126. close_invoice(invoice.id)
  127. self.make_info_log('[OK] Closing invoice')
  128. # Create bank statement
  129. create_bank_statement(account_voucher.id, date_now)
  130. self.make_info_log('[OK] Creating account bank statement')
  131. # Create bank payment statement
  132. if kw.get('paymentMethod', 'Efectivo') == 'Banco':
  133. create_bank_payment_statement(bank_payment_data, invoice.id, account_voucher.id)
  134. self.make_info_log('[OK] Creating bank payment statement')
  135. return {
  136. 'process': True,
  137. 'name': sale_order.display_name,
  138. 'date': get_datetime()
  139. }