// ADempiere-Vue (Frontend) for ADempiere ERP & CRM Smart Business Solution // Copyright (C) 2017-Present E.R.P. Consultores y Asociados, C.A. // Contributor(s): Yamel Senih ysenih@erpya.com www.erpya.com // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . // Get Instance for connection import { request } from '@/utils/ADempiere/request' import { config } from '@/utils/ADempiere/config' import { isEmptyValue } from '@/utils/ADempiere' /** * method in api/price-checking.js as getProductPrice * @author elsiosanchez */ export { getProductPrice as findProduct } from '@/api/ADempiere/form/price-checking.js' export { requestGetConversionRate } from '@/api/ADempiere/system-core.js' // List Point of sales export function getPointOfSales({ posUuid }) { return request({ url: `${config.pointOfSales.endpoint}/point-of-sales`, method: 'get', params: { point_of_sales_uuid: posUuid } }) .then(posResponse => { const { convertPointOfSales } = require('@/utils/ADempiere/apiConverts/pos.js') return convertPointOfSales(posResponse) }) } // List Point of sales export function listPointOfSales({ userUuid, pageSize, pageToken }) { return request({ url: `${config.pointOfSales.endpoint}/selling-points`, method: 'get', params: { user_uuid: userUuid, page_size: pageSize, page_token: pageToken } }) .then(posListResponse => { const { convertPointOfSales } = require('@/utils/ADempiere/apiConverts/pos.js') return { nextPageToken: posListResponse.next_page_token, recordCount: posListResponse.record_count, sellingPointsList: posListResponse.records.map(pos => { return convertPointOfSales(pos) }) } }) } // Create order from POS export function createOrder({ posUuid, customerUuid, documentTypeUuid, salesRepresentativeUuid, warehouseUuid }) { return request({ url: `${config.pointOfSales.endpoint}/create-order`, method: 'post', data: { pos_uuid: posUuid, customer_uuid: customerUuid, document_type_uuid: documentTypeUuid, sales_representative_uuid: salesRepresentativeUuid, warehouse_uuid: warehouseUuid } }) .then(createOrderResponse => { const { convertOrder } = require('@/utils/ADempiere/apiConverts/pos.js') return convertOrder(createOrderResponse) }) } // Update order from POS export function updateOrder({ orderUuid, posUuid, customerUuid, documentTypeUuid, description, warehouseUuid }) { return request({ url: `${config.pointOfSales.endpoint}/update-order`, method: 'post', data: { order_uuid: orderUuid, pos_uuid: posUuid, customer_uuid: customerUuid, document_type_uuid: documentTypeUuid, description, warehouse_uuid: warehouseUuid } }) .then(updateOrderResponse => { const { convertOrder } = require('@/utils/ADempiere/apiConverts/pos.js') return convertOrder(updateOrderResponse) }) } // Create Customer export function createCustomer({ value, taxId, duns, naics, name, name2, description, contactName, eMail, phone, businessPartnerGroupUuid, // Location address1, address2, address3, address4, cityUuid, cityName, postalCode, regionUuid, regionName, countryUuid, posUuid }) { return request({ url: 'form/addons/point-of-sales/create-customer', method: 'post', data: { value, tax_id: taxId, duns, naics, name, last_name: name2, description, contact_name: contactName, e_mail: eMail, phone, business_partner_group_uid: businessPartnerGroupUuid, // Location address1, address2, address3, address4, city_uuid: cityUuid, city_name: cityName, postal_code: postalCode, region_uuid: regionUuid, region_name: regionName, country_uuid: countryUuid, pos_uuid: posUuid } }) .then(businessPartnerResponse => { const { convertBusinessPartner } = require('@/utils/ADempiere/apiConverts/core.js') return convertBusinessPartner(businessPartnerResponse) }) } // Update Customer export function updateCustomer({ value, taxId, duns, naics, name, name2, description, contactName, eMail, phone, businessPartnerGroupUuid, // Location address1, address2, address3, address4, cityUuid, cityName, postalCode, regionUuid, regionName, countryUuid, posUuid }) { return request({ url: 'form/addons/point-of-sales/update-customer', method: 'post', data: { value, tax_id: taxId, duns, naics, name, last_name: name2, description, contact_name: contactName, e_mail: eMail, phone, business_partner_group_uid: businessPartnerGroupUuid, // Location address1, address2, address3, address4, city_uuid: cityUuid, city_name: cityName, postal_code: postalCode, region_uuid: regionUuid, region_name: regionName, country_uuid: countryUuid, pos_uuid: posUuid } }) .then(businessPartnerResponse => { const { convertBusinessPartner } = require('@/utils/ADempiere/apiConverts/core.js') return convertBusinessPartner(businessPartnerResponse) }) } // Get order from uuid export function getOrder(orderUuid) { return request({ url: `${config.pointOfSales.endpoint}/order`, method: 'get', params: { order_uuid: orderUuid } }) .then(getOrderResponse => { const { convertOrder } = require('@/utils/ADempiere/apiConverts/pos.js') return convertOrder(getOrderResponse) }) } // Create order from POS export function deleteOrder({ orderUuid // posUuid, // customerUuid, // documentTypeUuid, // salesRepresentativeUuid }) { return request({ url: `${config.pointOfSales.endpoint}/delete-order`, method: 'post', data: { order_uuid: orderUuid // pos_uuid: posUuid, // customer_uuid: customerUuid, // document_type_uuid: documentTypeUuid, // sales_representative_uuid: salesRepresentativeUuid } }) .then(response => { return response }) } // List orders from pos uuid export function listOrders({ posUuid, documentNo, businessPartnerUuid, grandTotal, openAmount, isPaid, isProcessed, isAisleSeller, isInvoiced, dateOrderedFrom, dateOrderedTo, salesRepresentativeUuid, pageSize, pageToken }) { /* const Criteria = require('@/utils/ADempiere/criteria.js') const criteria = new Criteria({ tableName: 'C_Order' }) criteria.addCondition({ columnName: 'DocumentNo', value: documentNo }).addCondition({ columnName: 'C_BPartner_ID_UUID', value: businessPartnerUuid }).addCondition({ columnName: 'GrandTotal', value: grandTotal }).addCondition({ columnName: 'OpenAmt', value: openAmount }).addCondition({ columnName: 'IsPaid', value: isPaid }).addCondition({ columnName: 'Processed', value: isProcessed }).addCondition({ columnName: 'IsAisleSeller', value: isAisleSeller }).addCondition({ columnName: 'IsInvoiced', value: isInvoiced }).addCondition({ columnName: 'DateOrderedFrom', value: dateOrderedFrom }).addCondition({ columnName: 'DateOrderedTo', value: dateOrderedTo }).addCondition({ columnName: 'SalesRep_ID_UUID', value: salesRepresentativeId }) */ return request({ url: `${config.pointOfSales.endpoint}/orders`, method: 'get', params: { pos_uuid: posUuid, document_no: documentNo, business_partner_uuid: businessPartnerUuid, sales_representative_uuid: salesRepresentativeUuid, grand_total: grandTotal, open_amount: openAmount, is_paid: isPaid, is_processed: isProcessed, is_aisle_seller: isAisleSeller, is_invoiced: isInvoiced, date_ordered_from: dateOrderedFrom, date_ordered_to: dateOrderedTo, page_size: pageSize, page_token: pageToken } }) .then(ordersListResponse => { const { convertOrder } = require('@/utils/ADempiere/apiConverts/pos.js') return { nextPageToken: ordersListResponse.next_page_token, recordCount: ordersListResponse.record_count, ordersList: ordersListResponse.records.map(productPrice => { return convertOrder(productPrice) }) } }) } // Create order line from order uuid and product export function createOrderLine({ orderUuid, warehouseUuid, productUuid, chargeUuid, description, quantity, price, discountRate }) { return request({ url: `${config.pointOfSales.endpoint}/create-order-line`, method: 'post', data: { order_uuid: orderUuid, product_uuid: productUuid, description, quantity, price, discount_rate: discountRate, charge_uuid: chargeUuid, warehouse_uuid: warehouseUuid } }) .then(createOrderLineResponse => { const { convertOrderLine } = require('@/utils/ADempiere/apiConverts/pos.js') return convertOrderLine(createOrderLineResponse) }) } // updateOrderLine orders from pos uuid export function updateOrderLine({ orderLineUuid, description, quantity, price, discountRate }) { return request({ url: `${config.pointOfSales.endpoint}/update-order-line`, method: 'post', data: { // is_add_quantity: true, order_line_uuid: orderLineUuid, description, quantity, price, discount_rate: discountRate } }) .then(createOrderLineResponse => { const { convertOrderLine } = require('@/utils/ADempiere/apiConverts/pos.js') return convertOrderLine(createOrderLineResponse) }) } // delete Order Line export function deleteOrderLine({ orderLineUuid }) { return request({ url: `${config.pointOfSales.endpoint}/delete-order-line`, method: 'post', data: { order_line_uuid: orderLineUuid } }) .then(response => { return response }) } export function listOrderLines({ orderUuid, pageSize, pageToken }) { return request({ url: `${config.pointOfSales.endpoint}/order-lines`, method: 'get', params: { order_uuid: orderUuid, page_size: pageSize, page_token: pageToken } }) .then(ordersLineListResponse => { const { convertOrderLine } = require('@/utils/ADempiere/apiConverts/pos.js') return { nextPageToken: ordersLineListResponse.next_page_token, recordCount: ordersLineListResponse.record_count, orderLineList: ordersLineListResponse.records.map(productPrice => { return convertOrderLine(productPrice) }) } }) } export function getKeyLayout({ keyLayoutUuid }) { return request({ url: `${config.pointOfSales.endpoint}/key-layout`, method: 'get', params: { key_layout_uuid: keyLayoutUuid } }) .then(keyLayoutResponse => { const { convertKeyLayout } = require('@/utils/ADempiere/apiConverts/pos.js') return convertKeyLayout(keyLayoutResponse) }) } // ListProductPrice export function getProductPriceList({ searchValue, businessPartnerUuid, posUuid, pageSize, pageToken }) { return request({ url: `${config.pointOfSales.endpoint}/product-prices`, method: 'get', params: { pos_uuid: posUuid, search_value: searchValue, business_partner_uuid: businessPartnerUuid, page_size: pageSize, page_token: pageToken } }) .then(productPriceListResponse => { const { convertProductPrice } = require('@/utils/ADempiere/apiConverts/core.js') return { nextPageToken: productPriceListResponse.next_page_token, recordCount: productPriceListResponse.record_count, productPricesList: productPriceListResponse.records.map(productPrice => { return convertProductPrice(productPrice) }) } }) } export function printOrder({ orderUuid }) { console.info(`Print order ${orderUuid}`) } export function generateImmediateInvoice({ posId, posUuid }) { console.info(`Generate imediate invoice with POS id ${posId}, and uuid ${posUuid}`) } export function completeOrder({ orderUuid }) { console.info(`Complete prepared order ${orderUuid}`) } export function reverseSalesTransaction({ orderUuid }) { console.info(`Reverse sales transaction ${orderUuid}`) } export function withdrawal({ posId, posUuid }) { console.info(`Withdrall cash with POS id ${posId}, and uuid ${posUuid}`) } export function createNewReturnOrder({ orderUuid }) { console.info(`New Customer Return Order ${orderUuid}`) } export function cashClosing({ posId, posUuid }) { console.info(`Cash closing with POS id ${posId}, and uuid ${posUuid}`) } // Create Payment export function createPayment({ posUuid, orderUuid, invoiceUuid, bankUuid, referenceNo, description, amount, paymentDate, tenderTypeCode, currencyUuid }) { return request({ url: `${config.pointOfSales.endpoint}/create-payment`, method: 'post', data: { pos_uuid: posUuid, order_uuid: orderUuid, invoice_uuid: invoiceUuid, bank_uuid: bankUuid, reference_no: referenceNo, description: description, amount: amount, payment_date: paymentDate, tender_type_code: tenderTypeCode, currency_uuid: currencyUuid } }) .then(createPaymentResponse => { return createPaymentResponse }) } // Update Payment export function updatePayment({ paymentUuid, bankUuid, referenceNo, description, amount, paymentDate, tenderTypeCode }) { return request({ url: `${config.pointOfSales.endpoint}/update-payment`, method: 'post', data: { payment_uuid: paymentUuid, bank_uuid: bankUuid, reference_no: referenceNo, description: description, amount: amount, payment_date: paymentDate, tender_type_code: tenderTypeCode } }) .then(updatePaymentResponse => { return updatePaymentResponse }) } // Delete Payment export function deletePayment({ paymentUuid }) { return request({ url: `${config.pointOfSales.endpoint}/delete-payment`, method: 'post', data: { payment_uuid: paymentUuid } }) .then(deletePaymentResponse => { return deletePaymentResponse }) } // List Payments export function getPaymentsList({ posUuid, orderUuid }) { return request({ url: `${config.pointOfSales.endpoint}/payments`, method: 'get', params: { pos_uuid: posUuid, order_uuid: orderUuid } }) .then(listPaymentsResponse => { const { paymentsMethod } = require('@/utils/ADempiere/apiConverts/pos.js') return { nextPageToken: listPaymentsResponse.next_page_token, recordCount: listPaymentsResponse.record_count, listPayments: listPaymentsResponse.records.map(payments => { return paymentsMethod(payments) }) } }) } /** * Process Order * This request allows process a draft order with payments * * req.query.token - user token * Body: * req.body.pos_uuid - POS UUID reference * req.body.order_uuid - Order UUID reference * req.body.create_payments - Optional create payments (if is true then hope payments array) * req.body.payments * [ * invoice_uuid - Invoice UUID reference * bank_uuid - Bank UUID reference * reference_no - Reference no * description - Description for Payment * amount - Payment Amount * tender_type_code - Tender Type * payment_date - Payment Date (default now) * currency_uuid - Currency UUID reference * ] */ export function processOrder({ posUuid, orderUuid, createPayments, payments }) { if (!isEmptyValue(payments)) { payments = payments.map(parameter => { return { invoice_uuid: parameter.invoiceUuid, bank_uuid: parameter.bankUuid, reference_no: parameter.referenceNo, description: parameter.description, amount: parameter.amount, tender_type_code: parameter.tenderTypeCode, payment_ate: parameter.paymentDate, currency_uid: parameter.currencyUuid } }) } return request({ url: `${config.pointOfSales.endpoint}/process-order`, method: 'post', data: { pos_uuid: posUuid, order_uuid: orderUuid, create_payments: createPayments, payments: payments } }) .then(processOrderResponse => { return processOrderResponse }) } /** * Overdrawn Invoice * This request allows you to process an order if the payment is more or less than the invoice. * * req.query.token - user token * Body: * req.body.pos_uuid - POS UUID reference * req.body.order_uuid - Order UUID reference * req.body.create_payments - Optional create payments (if is true then hope payments array) * req.body.payments * [ * invoice_uuid - Invoice UUID reference * bank_uuid - Bank UUID reference * reference_no - Reference no * description - Description for Payment * amount - Payment Amount * tender_type_code - Tender Type * payment_date - Payment Date (default now) * currency_uuid - Currency UUID reference * ] * req.body.customer_details [ * key - columnName * value - value * ] - customer data in case of refund or voucher card * req.body.option - reimbursement rate */ export function overdrawnInvoice({ posUuid, orderUuid, createPayments, payments, customerDetails, option }) { if (!isEmptyValue(payments)) { payments = payments.map(parameter => { return { invoice_uuid: parameter.invoiceUuid, bank_uuid: parameter.bankUuid, reference_no: parameter.referenceNo, description: parameter.description, amount: parameter.amount, tender_type_code: parameter.tenderTypeCode, payment_ate: parameter.paymentDate, currency_uid: parameter.currencyUuid } }) } return request({ url: '/form/addons/point-of-sales/overdrawn-invoice', method: 'post', data: { pos_uuid: posUuid, order_uuid: orderUuid, create_payments: createPayments, payments: payments, customer_details: customerDetails, option: option } }) .then(processOrderResponse => { return processOrderResponse }) } /** * Validate Ping * @param {string} posUuidd - POS UUID reference * @param {string} pin - User PIN * @returns {string} */ export function validatePin({ posUuid, pin }) { return request({ url: `${config.pointOfSales.endpoint}/validate-pin`, method: 'post', data: { pos_uuid: posUuid, pin: pin } }) .then(pinResponse => { return pinResponse }) } /** * list Warehouses * @param {string} posUuidd - POS UUID reference */ export function listWarehouses({ posUuid }) { return request({ url: `${config.pointOfSales.endpoint}/available-warehouses`, method: 'get', params: { pos_uuid: posUuid } }) .then(listWarehouseResponse => { return listWarehouseResponse }) } /** * list Document Types * @param {string} posUuidd - POS UUID reference */ export function listDocumentTypes({ posUuid }) { return request({ url: `${config.pointOfSales.endpoint}/available-document-types`, method: 'get', params: { pos_uuid: posUuid } }) .then(response => { return response }) } /** * List Prices * @param {string} posUuidd - POS UUID reference */ export function listPrices({ posUuid }) { return request({ url: `${config.pointOfSales.endpoint}/available-price-list`, method: 'get', params: { pos_uuid: posUuid } }) .then(listPricesResponse => { return listPricesResponse }) } /** * Currencies * @param {string} posUuidd - POS UUID reference */ export function listCurrencies({ posUuid }) { return request({ url: `${config.pointOfSales.endpoint}/available-currencies`, method: 'get', params: { pos_uuid: posUuid } }) .then(listCurrencies => { return listCurrencies }) } /** * Tender Type * @param {string} posUuidd - POS UUID reference */ export function listTenderType({ posUuid }) { return request({ url: `${config.pointOfSales.endpoint}/available-tender-types`, method: 'get', params: { pos_uuid: posUuid } }) .then(listTenderType => { return listTenderType }) }