feat: customer matching on individual discounts panel

This commit is contained in:
Sérgio Salgado 2021-07-23 04:02:27 +01:00 committed by Josh Harvey
parent eda6decae0
commit 03fd19e0cf
5 changed files with 101 additions and 8 deletions

View file

@ -1,6 +1,7 @@
const db = require('./db')
const uuid = require('uuid')
const _ = require('lodash/fp')
const pgp = require('pg-promise')()
function getAvailablePromoCodes () {
const sql = `SELECT * FROM coupons WHERE soft_deleted=false`
@ -52,6 +53,38 @@ function deleteIndividualDiscount (id) {
return db.none(sql, [id])
}
function getCustomersWithDiscounts (discounts) {
let phoneNumbers = []
let idCardNumbers = []
_.each(it => {
switch (it.idType) {
case 'phone':
phoneNumbers.push(it.value)
break
case 'idNumber':
idCardNumbers.push(it.value)
break
default:
break
}
}, discounts)
if (_.isEmpty(phoneNumbers) && _.isEmpty(idCardNumbers)) {
return Promise.resolve([])
}
const phoneNumbersSql = _.map(pgp.as.text, phoneNumbers).join(',')
const idCardNumbersSql = _.map(pgp.as.text, idCardNumbers).join(',')
const hasPhoneNumbers = !_.isEmpty(phoneNumbers)
const hasIDNumbers = !_.isEmpty(phoneNumbers)
const sql = `SELECT * FROM customers WHERE ${hasPhoneNumbers && `phone IN ($1^)`} ${hasPhoneNumbers && hasIDNumbers && `OR`} ${hasIDNumbers && `id_card_data_number IN ($2^)`}`
return db.any(sql, [phoneNumbersSql, idCardNumbersSql])
.then(res => _.map(it => it ? _.mapKeys(_.camelCase, it) : null, res))
}
module.exports = {
getAvailablePromoCodes,
getPromoCode,
@ -60,5 +93,6 @@ module.exports = {
getNumberOfAvailablePromoCodes,
getAvailableIndividualDiscounts,
createIndividualDiscount,
deleteIndividualDiscount
deleteIndividualDiscount,
getCustomersWithDiscounts
}