__init__.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. # -*- coding: utf-8 -*-
  2. from account_bank_statement import create_bank_statement, create_bank_statement_lines
  3. from account_invoice import create_invoice, prepare_invoice, validate_invoice, close_invoice
  4. from account_journal import get_journals, get_currencies_from_journal
  5. from account_move import create_invoice_move_lines, create_account_move
  6. from account_payment_term import get_payment_terms
  7. from account_voucher import create_account_voucher
  8. from http_response import make_gzip_response
  9. from product_pricelist import get_pricelist_id
  10. from product_template import get_products
  11. from purchase_order import (get_purchase_orders, get_purchase_order, create_purchase_order, confirm_purchase_order, done_purchase_order, force_assign_picking, done_picking)
  12. from res_bank_cheque_type import get_cheque_types
  13. from res_bank_payments_type import get_bank_payment_types
  14. from res_bank import get_banks
  15. from res_currency import check_base_currency, get_base_currency
  16. from res_partner import get_suppliers
  17. from res_users import get_current_user
  18. from server_date import get_date
  19. from stock_picking_type import get_picking_types
  20. from stock_picking import get_pickings, confirm_picking
  21. from stock_warehouse import get_warehouses
  22. def get_data(mode=None):
  23. data = {}
  24. check_base_currency()
  25. warehouses = get_warehouses()
  26. location_ids = map(lambda x: x.get('locationStock').get('id'), warehouses)
  27. currencies = get_currencies_from_journal()
  28. if len(currencies) == 0:
  29. currencies = [get_base_currency()]
  30. if mode == 'purchase' or mode == 'expense':
  31. data = {
  32. 'date': get_date(),
  33. 'user': get_current_user(),
  34. 'currencies': currencies,
  35. 'journals': get_journals(),
  36. 'suppliers': get_suppliers(),
  37. 'products': get_products(mode, location_ids),
  38. 'pickingTypes': get_picking_types(),
  39. 'paymentTerms': get_payment_terms(),
  40. 'banks': get_banks(),
  41. 'bankPaymentTypes': get_bank_payment_types(),
  42. 'chequeTypes': get_cheque_types(),
  43. 'warehouses': warehouses
  44. }
  45. if mode == 'product_picking':
  46. data = {
  47. 'date': get_date(),
  48. 'user': get_current_user(),
  49. 'currencies': currencies,
  50. 'suppliers': get_suppliers(),
  51. 'products': get_products('purchase', location_ids),
  52. 'warehouses': warehouses
  53. }
  54. if mode == 'payment':
  55. data = {
  56. 'purchaseOrders': get_purchase_orders(),
  57. 'currencies': currencies,
  58. 'suppliers': get_suppliers(),
  59. 'journals': get_journals(),
  60. 'paymentTerms': get_payment_terms(),
  61. 'banks': get_banks(),
  62. 'bankPaymentTypes': get_bank_payment_types(),
  63. 'chequeTypes': get_cheque_types(),
  64. 'warehouses': warehouses
  65. }
  66. if mode == 'product_taking':
  67. data = {
  68. 'stockPickings': get_pickings()
  69. }
  70. return make_gzip_response(data)
  71. def process_data(data=None):
  72. if not data:
  73. return {}
  74. def drafting_order(currency_id, supplier_id, cart_items, date_now, payment_term_id, warehouse_id):
  75. pricelist_id = get_pricelist_id(currency_id)
  76. order = create_purchase_order(supplier_id, cart_items, date_now, currency_id, pricelist_id, payment_term_id, warehouse_id)
  77. return order.id, currency_id
  78. def making_order(order_id):
  79. if not order_id:
  80. return None
  81. order = get_purchase_order(order_id)
  82. confirm_purchase_order(order.id)
  83. return order.id
  84. def paying_order(order_id, supplier_invoice_number=None, date_now=None, payment_term_id=None, mode=None):
  85. order = get_purchase_order(order_id)
  86. lines = [{
  87. 'name': l.name,
  88. 'id': l.product_id.id,
  89. 'quantity': l.product_qty,
  90. 'price': l.price_unit
  91. } for l in order.order_line]
  92. invoice = create_invoice(order.partner_id.id, lines, order.currency_id.id, payment_term_id, supplier_invoice_number)
  93. invoice_ids = invoice.mapped(lambda x: x.id)
  94. order.write({
  95. 'invoice_ids': [[4, invoice_ids, False]],
  96. 'invoiced': True
  97. })
  98. prepare_invoice(invoice_ids, currency_id, date_now)
  99. move_lines = create_invoice_move_lines(invoice_ids, payment, date_now)
  100. account_move = create_account_move(invoice_ids, move_lines)
  101. validate_invoice(invoice_ids, mode)
  102. account_voucher = create_account_voucher(account_move.id, journal_id, currency_id, payment)
  103. close_invoice(invoice_ids)
  104. statement_lines = create_bank_statement_lines(account_voucher.id)
  105. bank_statement = create_bank_statement(account_voucher.id, statement_lines, date_now)
  106. return bank_statement.id
  107. def complete_order(order_id):
  108. if not order_id:
  109. return None
  110. force_assign_picking(order_id)
  111. done_picking(order_id)
  112. date_now = get_date()
  113. mode = data.get('mode')
  114. currency_id = data.get('currencyId')
  115. journal_id = data.get('journalId')
  116. supplier_id = data.get('supplierId')
  117. supplier_invoice_number = data.get('supplierInvoiceNumber', None)
  118. cart_items = data.get('items')
  119. payment_term_id = data.get('paymentTermId')
  120. warehouse_id = data.get('warehouseId', None)
  121. payment = float(data.get('payment', 0.0))
  122. if mode not in ('product_picking', 'payment', 'product_taking'):
  123. order_id, currency_id = drafting_order(currency_id, supplier_id, cart_items, date_now, payment_term_id, warehouse_id)
  124. confirm_purchase_order(order_id)
  125. paying_order(order_id, supplier_invoice_number, date_now, payment_term_id, mode)
  126. if mode == 'product_picking':
  127. order_id, currency_id = drafting_order(currency_id, supplier_id, cart_items, date_now, payment_term_id, warehouse_id)
  128. confirm_purchase_order(order_id)
  129. if mode == 'payment':
  130. order_id = data.get('purchaseOrderId', None)
  131. if not order_id:
  132. return
  133. paying_order(order_id, supplier_invoice_number, date_now, payment_term_id, mode)
  134. done_purchase_order(order_id)
  135. if mode == 'product_taking':
  136. stock_picking_id = data.get('stockPickingId')
  137. confirm_picking(stock_picking_id)
  138. return {
  139. 'status': 'ok'
  140. }