|
@@ -89,6 +89,17 @@ class PaymentsSales(http.Controller):
|
|
|
'dateMaturity': line.date_maturity,
|
|
|
'amountCurrency': (line.amount_currency * -1) if (line.amount_currency != 0) else line.credit,
|
|
|
'amountResidualCurrency': line.amount_residual_currency,
|
|
|
+ 'currencyInvoice': {
|
|
|
+ 'id': invoice.currency_id.id,
|
|
|
+ 'displayName': invoice.currency_id.display_name,
|
|
|
+ 'symbol': invoice.currency_id.symbol,
|
|
|
+ 'rateSilent': invoice.currency_id.rate_silent,
|
|
|
+ 'rate': invoice.currency_id.rate,
|
|
|
+ 'thousandsSeparator': invoice.currency_id.thousands_separator,
|
|
|
+ 'decimalSeparator': invoice.currency_id.decimal_separator,
|
|
|
+ 'decimalPlaces': invoice.currency_id.decimal_places,
|
|
|
+ 'position': invoice.currency_id.position
|
|
|
+ },
|
|
|
'currencyAmount': [{
|
|
|
'id': currency.id,
|
|
|
'displayName': currency.display_name,
|
|
@@ -112,7 +123,6 @@ class PaymentsSales(http.Controller):
|
|
|
Get Journal
|
|
|
'''
|
|
|
def get_journals(self):
|
|
|
- # domain =[('active', '=', True),('type', 'in',['bank', 'cash']), ('default_credit_account_id.currency_id', '=', False)]
|
|
|
domain =[('active', '=', True),('type', 'in',['bank', 'cash'])]
|
|
|
paymentsJournals = []
|
|
|
|
|
@@ -231,3 +241,168 @@ class PaymentsSales(http.Controller):
|
|
|
'journals': self.get_journals(),
|
|
|
'currencies': self.get_currency()
|
|
|
})
|
|
|
+
|
|
|
+ '''
|
|
|
+ ____ _ __ ____ __ _____ _ _ _____ ____ ____ ____ ___ ____ _____ ____ ____
|
|
|
+ | _ \ / \\ \ / / \/ | ____| \ | |_ _/ ___| | _ \| _ \ / _ \ / ___| ____/ ___/ ___|
|
|
|
+ | |_) / _ \\ V /| |\/| | _| | \| | | | \___ \ | |_) | |_) | | | | | | _| \___ \___ \
|
|
|
+ | __/ ___ \| | | | | | |___| |\ | | | ___) | | __/| _ <| |_| | |___| |___ ___) |__) |
|
|
|
+ |_| /_/ \_\_| |_| |_|_____|_| \_| |_| |____/ |_| |_| \_\\___/ \____|_____|____/____/
|
|
|
+ '''
|
|
|
+ '''
|
|
|
+ Get the current period
|
|
|
+ '''
|
|
|
+ def get_period(self, date_server):
|
|
|
+ return request.env['account.period'].search([('date_start','<=', date_server), ('date_stop', '>=', datetime.now().strftime(DATE_FORMAT))])
|
|
|
+
|
|
|
+ '''
|
|
|
+ Get Invoice
|
|
|
+ '''
|
|
|
+ def get_invoice(self, invoice_id):
|
|
|
+ return request.env['account.invoice'].search([('id', '=', invoice_id)])
|
|
|
+
|
|
|
+ '''
|
|
|
+ Create Voucher
|
|
|
+ '''
|
|
|
+ def create_voucher(self, period, invoice, company_id, amountPayments, date_server, journalId, move_line_Ids, customerId):
|
|
|
+ # Get Journal
|
|
|
+ journal_id = request.env['account.journal'].browse(int(journalId))
|
|
|
+ currency_id = journal_id.default_credit_account_id.currency_id.id or journal_id.default_credit_account_id.company_currency_id.id
|
|
|
+ # Get Move Lines
|
|
|
+ move_line = request.env['account.move.line'].browse(move_line_Ids).sorted(key=lambda r: r.id)
|
|
|
+ # get customer
|
|
|
+ customerId = request.env['res.partner'].browse(customerId)
|
|
|
+ decimal_precision = request.env['decimal.precision'].precision_get('Account')
|
|
|
+ # Create Line Voucher
|
|
|
+ company_currency = request.env.user.company_id.currency_id
|
|
|
+ currencyVocuher = request.env['res.currency'].browse(currency_id)
|
|
|
+
|
|
|
+ line_dr_ids = []
|
|
|
+ amount = round(float(amountPayments), decimal_precision)
|
|
|
+
|
|
|
+ for line in move_line:
|
|
|
+ amount_residual = line.amount_residual
|
|
|
+
|
|
|
+ if (company_currency.id != currencyVocuher.id):
|
|
|
+ amount_residual = round((amount_residual * ( currencyVocuher.rate / company_currency.rate)), decimal_precision)
|
|
|
+
|
|
|
+ line_dr_ids.append([0, False, {
|
|
|
+ 'date_due': line.date_maturity,
|
|
|
+ 'account_id': line.account_id.id,
|
|
|
+ 'date_original': line.move_id.date,
|
|
|
+ 'move_line_id': line.id,
|
|
|
+ 'amount_original': abs(line.credit or line.debit or 0.0),
|
|
|
+ 'amount_unreconciled': abs(line.amount_residual),
|
|
|
+ 'amount': min(abs(amount), abs(amount_residual)),
|
|
|
+ 'reconcile': True if abs(amount_residual) == min(abs(amount), abs(amount_residual)) else False,
|
|
|
+ 'currency_id': currency_id
|
|
|
+ }])
|
|
|
+ amount -= min(abs(amount), amount_residual)
|
|
|
+
|
|
|
+ values = {
|
|
|
+ 'reference': invoice.number,
|
|
|
+ 'type': 'payment',
|
|
|
+ 'journal_id': journal_id.id,
|
|
|
+ 'company_id': company_id,
|
|
|
+ 'pre_line': True,
|
|
|
+ 'amount': round(float(amountPayments), decimal_precision),
|
|
|
+ 'period_id': period.id,
|
|
|
+ 'date': date_server,
|
|
|
+ 'partner_id': customerId.id,
|
|
|
+ 'account_id': journal_id.default_credit_account_id.id,
|
|
|
+ 'currency_id': currency_id,
|
|
|
+ 'line_dr_ids': line_dr_ids,
|
|
|
+ 'payment_rate_currency_id': currency_id
|
|
|
+ }
|
|
|
+
|
|
|
+ account_voucher = request.env['account.voucher'].create(values)
|
|
|
+ account_voucher.action_move_line_create()
|
|
|
+
|
|
|
+ return account_voucher
|
|
|
+
|
|
|
+ '''
|
|
|
+ close invoice
|
|
|
+ '''
|
|
|
+ def close_invoice(self, invoiceid):
|
|
|
+ invoice = request.env['account.invoice'].search([('id', '=', invoiceid)])
|
|
|
+
|
|
|
+ if invoice.residual <= 0:
|
|
|
+ invoice.confirm_paid()
|
|
|
+
|
|
|
+ return invoice
|
|
|
+
|
|
|
+ '''
|
|
|
+ Create bank Statement
|
|
|
+ '''
|
|
|
+ def create_bank_statement(self, date_server, user_id, account_voucher):
|
|
|
+ # Get bank Statamente
|
|
|
+ bank_statement = request.env['account.bank.statement'].search([('journal_id', '=', account_voucher.journal_id.id), ('date', '=', date_server)])
|
|
|
+ amount = account_voucher.amount
|
|
|
+ if account_voucher.type == 'payment':
|
|
|
+ amount = amount * -1
|
|
|
+
|
|
|
+ # Create line bank
|
|
|
+ bank_statement_line = [[0, False, {
|
|
|
+ 'name': account_voucher.reference,
|
|
|
+ 'partner_id': account_voucher.partner_id.id,
|
|
|
+ 'amount': amount,
|
|
|
+ 'voucher_id': account_voucher.id,
|
|
|
+ 'journal_id': account_voucher.journal_id.id,
|
|
|
+ 'account_id': account_voucher.account_id.id,
|
|
|
+ 'journal_entry_id': account_voucher.move_id.id,
|
|
|
+ 'currency_id': account_voucher.currency_id.id,
|
|
|
+ 'ref': 'NP'
|
|
|
+ }]]
|
|
|
+
|
|
|
+ bank = {
|
|
|
+ 'journal_id': account_voucher.journal_id.id,
|
|
|
+ 'period_id': account_voucher.period_id.id,
|
|
|
+ 'date': date_server,
|
|
|
+ 'user_id': user_id,
|
|
|
+ 'state': 'open' if account_voucher.journal_id.type == 'cash' else 'draft',
|
|
|
+ 'line_ids': bank_statement_line
|
|
|
+ }
|
|
|
+
|
|
|
+ if bank_statement:
|
|
|
+ if len(bank_statement) == 1:
|
|
|
+ bank_statement.write(bank)
|
|
|
+ else:
|
|
|
+ bank_statement[len(bank_statement) -1].write(bank)
|
|
|
+ else:
|
|
|
+ bank_statement = bank_statement.create(bank)
|
|
|
+
|
|
|
+ return bank_statement
|
|
|
+
|
|
|
+ '''
|
|
|
+ Payment process
|
|
|
+ '''
|
|
|
+ @http.route('/eiru_payments_purchases/purchases_process', type='json', auth='user', methods=['POST'], cors='*')
|
|
|
+ def purchases_process(self, **kw):
|
|
|
+ self.make_info_log('Processing payments purchases...')
|
|
|
+ # Get Date Server
|
|
|
+ date_server = datetime.now().strftime(DATE_FORMAT)
|
|
|
+ #Get Periodo
|
|
|
+ period = self.get_period(date_server)
|
|
|
+ self.make_info_log('[OK] Getting period')
|
|
|
+ # Get invoice
|
|
|
+ invoice = self.get_invoice(kw.get('invoiceId'))
|
|
|
+ self.make_info_log('[OK] Getting invoice')
|
|
|
+ # Get User - company
|
|
|
+ user_id = request.env.user.id
|
|
|
+ self.make_info_log('[OK] Getting user')
|
|
|
+ # Get Company
|
|
|
+ company_id = request.env.user.company_id.id
|
|
|
+ self.make_info_log('[OK] Getting Company')
|
|
|
+ # create voucher
|
|
|
+ voucher = self.create_voucher(period, invoice, company_id, kw.get('amountPayments', 0), date_server, kw.get('journalId'), kw.get('moveLinesId'), kw.get('supplierId'))
|
|
|
+ self.make_info_log('[OK] creating voucher...')
|
|
|
+ # close invoice
|
|
|
+ close_invoice = self.close_invoice(kw.get('invoiceId'))
|
|
|
+ self.make_info_log('[OK] closing invoice...')
|
|
|
+ # Create bank statement
|
|
|
+ bank_statement = self.create_bank_statement(date_server, user_id, voucher)
|
|
|
+ self.make_info_log('[OK] creating bank statement')
|
|
|
+
|
|
|
+ return {
|
|
|
+ 'process': True
|
|
|
+ }
|