import { M3ENCPROMO } from './Models/M3ENCPROMO.class'; import { M3Ubicacion } from '../Maestro/Ubicacion/M3Ubicacion.type'; import { M3CONDIAGRUPACION } from './Models/M3CONDIAGRUPACION.class'; import { M3CONDIPROMO } from './Models/M3CONDIPROMO.class'; import { TypeM3PrdGrp } from '../Maestro/M3PrdGrp.type'; import { M3DETCONDIPROMO } from './Models/M3DETCONDIPROMO.class'; import { PromocionesAsociadas, PromocionProcesada, PromocionCombinada } from './Models/M3PromoProcesada.class'; import { M3Procesos } from '../Registro/m3-procesos'; import { M3PEncItems } from '../Registro/m3-penc-items'; import { M3PEncFP } from '../Registro/m3-penc-fp'; import { PostServiceM3 } from '../../ConexionSQL/posts.service'; import { M3PDetalleItems, M3PItemsWEB } from '../Registro/m3-pdetalle-items'; import { M3PrdGeneral } from '../Maestro/M3PrdGeneral.type'; import { MathTF } from '../Miscelanea/MathTF.class'; export declare class promocionesService { oMathTF: MathTF; goDataUser: any; goDataAdicional: M3PItemsWEB; goM3ENCPROMO: Array; constructor(oDataUser: any, oDataAdicional: M3PItemsWEB); operators: { '<': (a: any, b: any) => boolean; '>': (a: any, b: any) => boolean; '<=': (a: any, b: any) => boolean; '>=': (a: any, b: any) => boolean; 'IGUAL': (a: any, b: any) => boolean; 'DIFF': (a: any, b: any) => boolean; 'EN': (a: any, b: any) => boolean; 'AND': (a: any, b: any) => any; 'OR': (a: any, b: any) => any; '*': (a: any, b: any) => boolean; 'MOD': (a: any, b: any) => boolean; }; VerificarPromociones(oM3Procesos: M3Procesos, oTypeM3PrdGrp: TypeM3PrdGrp, oM3Ubicacion: M3Ubicacion, oM3ENCPROMO: Array, lTiposPromo: Array): any[]; validarEstadosEncPromo(encabezadoPromo: M3ENCPROMO): boolean; VerificarAgrupacionPromo(oM3Procesos: M3Procesos, oTypeM3PrdGrp: TypeM3PrdGrp, oM3Ubicacion: M3Ubicacion, agrupacion: M3CONDIAGRUPACION, oM3EncPromo: M3ENCPROMO): any; VerificarCondicionesPromo(oM3Procesos: M3Procesos, oTypeM3PrdGrp: TypeM3PrdGrp, oM3Ubicacion: M3Ubicacion, condicion: M3CONDIPROMO): any; /** * Agregar a json de respuesta si se genero OK la informacion de la condicion * @param jResp * @param condicion */ AgregarCondicionOK(jResp: any, condicion: M3CONDIPROMO): void; VerificarCondicionContraData(oM3Procesos: M3Procesos, oTypeM3PrdGrp: TypeM3PrdGrp, oM3Ubicacion: M3Ubicacion, condicion: M3CONDIPROMO, jAdicionales: any): any; GetJRespFromArray(aResps: Array, tipo: any, tipo2: any): any; GenerarRespuesta(bAPLPromo: boolean, jAdicionales: any): any; /** * Verificar clasificaciones por proceso. * @param oM3Procesos Procesos de M3 * @param detCondiciones Condiciones de promociones * @param jAdicionales JSON */ VerificarClasificacionesProceso(oListEncab: Array, combi: PromocionCombinada, lPrecios: Array, bEsAcumulable: boolean): any; /** * Verificar clasificaciones por proceso. * @param oM3Procesos Procesos de M3 * @param detCondiciones Condiciones de promociones * @param jAdicionales JSON */ procesarCaracteristicaParcial(oListEncab: Array, combi: PromocionCombinada, lPrecios: Array, bEsAcumulable: boolean): any; private AplicarPromoByValores; /** * Armar nuevo arreglo, teniendo en cuenta el arreglo entrante. Se recorre de atras hacia adelante y se va creando el nuevo arreglo * @param lPrecios * @param residuo */ ArmarNuevoArrayDesdeResiduo(lPrecios: Array, residuo: any): any[]; /** * Validar promociones por procesos, teniendo en cuenta la informacion del M3 procesos * @param oM3Procesos M3 Procesos Objeto, con la informacion de todos los M3Procesos * @param condicion Objeto con informacion de condicion * @param jAdicionales JSON de informacion adicional */ VerificarInfoProceso(oM3Procesos: M3Procesos, condicion: M3CONDIPROMO, jAdicionales: any): any; /** * Valida si el proceso tiene una forma de pago que cumpla con la condicion entrante, hace un pass true, la logica se hace desde la forma de pago * @param oM3Procesos * @param condicion * @param jAdicionales */ VerificarProcesoFormaPago(oM3Procesos: M3Procesos, condicion: M3CONDIPROMO, jAdicionales: any): any; /** * Validar promociones por procesos, teniendo en cuenta la informacion del M3 procesos * @param oM3Procesos M3 Procesos Objeto, con la informacion de todos los M3Procesos * @param condicion Objeto con informacion de condicion * @param jAdicionales JSON de informacion adicional */ VerificarInfoProducto(oM3PrdGeneral: M3PrdGeneral, condicion: M3CONDIPROMO, jAdicionales: any): any; /** * Verificar informacion de producto agrupado. * @param oTypeM3PrdGrp * @param condicion * @param jAdicionales */ VerificarInfoProductoPRDGRP(oTypeM3PrdGrp: TypeM3PrdGrp, condicion: M3CONDIPROMO, jAdicionales: any): any; /** * Verificar informacion adicional, esta informacion adicional esta en una variable global: goDataAdicional * @param condicion Objeto con informacion de condicion * @param jAdicionales JSON de informacion adicional */ VerificarInfoAdicional(condicion: M3CONDIPROMO, jAdicionales: any): any; /** * Verificar informacion contra usuario data. * @param condicion * @param jAdicionales */ VerificarInfoUserData(condicion: M3CONDIPROMO, jAdicionales: any): any; VerificacionM3DetalleCondicion(oM3Procesos: M3Procesos, oTypeM3PrdGrp: TypeM3PrdGrp, oM3Ubicacion: M3Ubicacion, detCondiciones: Array, conceptoCondicion: string, jAdicionalesCondicion: any): any; ValidarRespuesta(objectValidate: any): any; /** * Validar reglas configuradas desde JSON de Adicionales * @param jAdicionales */ ValidacionesByJAdicionales(jAdicionales: any): boolean; ValidarVigencia(val1: Date, val2: Date): boolean; GetFechaNumber(date: Date): string; ValidarAccion(jResp: any, jAdicionales: any): void; RetomarValoresPromocion(oM3ENCPROMO: M3ENCPROMO, jResp: any): void; ProcesarPromocion(JPromociones: Array, oTypeM3PrdGrp: TypeM3PrdGrp, oM3ENCPROMO: Array): PromocionProcesada; /** * Procesamiento de promocion que se hacen validas despues de registrar todos los productos. * @param JPromociones * @param oM3Procesos */ ProcesarPromoAfter(JPromociones: Array, oM3Procesos: M3Procesos, oM3ENCPROMO: Array): PromocionProcesada; /** * Procesamiento de promocion en general * @param JPromociones * @param nPrecio * @param oPromocionProcesada */ ProcesarPromoGeneral(JPromociones: Array, nPrecio: number, oPromocionProcesada: PromocionProcesada, oM3ENCPROMO: Array): PromocionProcesada; /** * Validacion de mejor opcion, teniendo en cuenta las promociones procesadas. * @param oListaPromosAsoc Lista de promociones procesadas * @param oPromocionProcesada Promocion procesada, que retornará a flujo. */ ValidarMejorPromocion(oListaPromosAsoc: Array, oPromocionProcesada: PromocionProcesada, precio: number): PromocionProcesada; aplicaPromoEXC(oListaPromosAsoc: Array, oPromocionProcesada: PromocionProcesada, valorPromoEXC: number): void; aplicaPromoACMDIN(oListaPromosAsoc: Array, oPromocionProcesada: PromocionProcesada, valorPromoACMDIN: number): void; /** * Obtener el maximo valor segun la regla a comparar * @param oListaPromosAsoc * @param sRegla */ GetMaxXRegla(oListaPromosAsoc: Array, sRegla: string, oPromocionProcesada: PromocionProcesada): number; ProcesarPromoByTipo(promocion: any, Precio: number, oPromocionProcesada: PromocionProcesada, oM3ENCPROMO: Array): PromocionesAsociadas; ValidarCantidadObsequios(oM3ENCPROMO: Array, obsequios: Array, oPromocionesAsociadas: PromocionesAsociadas): void; /** * Validar campos adicionales en promociones * @param oM3ENCPROMO * @param oPromocionCombinada * @param promocion */ ValidarCamposAdicionales(oM3ENCPROMO: Array, oPromocionCombinada: PromocionCombinada, promocion: any): void; ProcesarCombinada(oM3Procesos: M3Procesos): M3Procesos; /** * Procesamiento de promociones combinadas, teniendo en cuenta la lista de promociones combinadas de M3Procesos * @param ioM3Proceso Objeto M3 Procesos, el cual se recorrerá la informacion de lista de promociones combinadas */ PromoCombinadasV2(ioM3Proceso: M3Procesos): M3Procesos; ordenarListaEnc(olistaEnc: M3PEncItems[], esAcumulable: any): void; AplReglaCombValorTotal(lPrecios: Array, oListEncab: Array, combi: PromocionCombinada, bEsAcumulable: boolean): void; procesarObseqSumTotal(productosAplicaPromo: M3PEncItems[], combi: PromocionCombinada, oM3Procesos: M3Procesos): void; agregarProductoAProductosHijosSumTotal(productosHijosDelCombo: Array, oM3Proceso: M3Procesos, productosRevisados: any): void; getProdutoPromoComboSumTotal(productosEnM3Proceso: Array, oPrecioDelProductoActual: any): M3PEncItems; /** * Lista de precios * @param lPrecios * @param oListEncab */ GetListaPrecios(lPrecios: Array, oListEncab: Array): any[]; /** * Promocion de combo, x productos, y productos, ... n productos * por $1000 * @param lPrecios * @param oListEncab * @param combi * @param bEsAcumulable */ PromocionCombinadaCombo(lPrecios: Array, oListEncab: Array, combi: PromocionCombinada, bEsAcumulable: boolean, ioM3Proceso: M3Procesos): boolean; filtrarListaCondicionesCombo(listCondiciones: Array, oM3PEncItemsList: Array): void; limpiarEncItemPrdCondi(oM3PEncItemsList: Array): void; agregarAProductosQuitarCombi(oM3Proceso: M3Procesos, oM3PEncItems: M3PEncItems, cantidad?: number): void; agregarProductoAProductosHijos(productosHijosDelCombo: Array, oM3Proceso: M3Procesos, oPrecioDelProductoActual: any): void; getProdutoPromoCombo(productosEnM3Proceso: Array, oPrecioDelProductoActual: any): M3PEncItems; /** * Agregar en hashmap de precios * @param hmlPrecios * @param ID */ AddtoHmPrecios(hmlPrecios: Array, ID: string): any; /** * Buscar encabezados que tenga la promocion y condicion enviada como parametro * @param oListEncab * @param IdCondicion * @param idPromociones */ BuscarEncByPromoYCond(oListEncab: Array, IdCondicion: string, idPromociones: string): M3PEncItems[]; /** * Validación si la promoción que llega como parametro, es acumulable o no * @param promocion */ GetEsAcumulablePromo(promocion: PromocionCombinada): boolean; procesarProductoAplDesc(oListEncab: Array, combi: PromocionCombinada, ioM3Proceso: M3Procesos, esAcumulable: boolean): void; /** * Procesamiento de obsequios en el cierre * Valida toda la lista de encabezados, teniendo en cuenta la cantidad ingresada en el carrito de compras * Valida la promoción, por cada cuantos productos ingresados, cuántos obsequios se pueden dar. * Trae todos los obsequios que se ingresaron en el carrito de compras, los lista * coloca en valor 0 los obsequios que selecciono automaticamente el algoritmo * Recalculo de precios, impuestos y demas valores totales. * @param oListEncab Lista de los productos ingresados al carrito que tienen obsequio * @param combi Información de promoción de obsequios * @param ioM3Proceso Proceso con todos los productos e información. */ ProcesarPromoObsqCierre(oListEncab: Array, combi: PromocionCombinada, ioM3Proceso: M3Procesos, esAcumulable: boolean): void; /** * Aplicar reglas, respecto a la cantidad ingresada. * @param oPromocionesAsociadas * @param oPromocionProcesada */ AplicarReglaModCantidad(lPrecios: Array, oListEncab: Array, combi: PromocionCombinada, bEsAcumulable: boolean): void; /** * Cargar combinadas desde dinamicas * @param ioM3Proceso */ GetCombinadasFromDinamicas(ioM3Proceso: M3Procesos): void; /** * Adicionar a dinamicas proceso de combinadas * @param ioM3Proceso */ AddDinamicaProcesoCombinadas(ioM3Proceso: M3Procesos): void; /** * Calcular promociones, segun la lista de precios dividida. * @param lPrecios Lista de precios, contra este objeto se iterará y se ordenará de mayor a menor * @param oListEncab * @param combi */ CalcularPromocionesByListaPrec(lPrecios: Array, oListEncab: Array, combi: PromocionCombinada, bEsAcumulable: boolean): void; /** * Calcular precio total teniendo en cuenta la lista de precios * @param lPrecios Lista de precios a tener en cuenta * @param oListEncab Lista de encabezados * @param combi Promocion combinada */ CalculateTotalPriceFromList(lPrecios: Array, oListEncab: Array, combi: PromocionCombinada, bAplValida: boolean, bEsAcumulable: boolean): void; QuitarLasPromosDirectas(enc: M3PEncItems): void; QuitarLasPromosCombinadas(enc: M3PEncItems): void; /** * Recalcular precio unitario, a partir de un nuevo precio Total. * @param enc * @param newPrice */ RecalcularPrecioUnitFromTotal(enc: M3PEncItems, newPrice: number): void; /** * Valida si todos los precios de un producto se cambiaron o no. * @param lPrecios Lista con todos los items * @param enc */ ValidarSiTodosAPLPromoCombinada(lPrecios: Array, enc: M3PEncItems): boolean; /** * Obtener valores de promociones dependiendo del numero de items que no se modificaron * @param lPrecios * @param enc */ GetValorPromoAnterior(lPrecios: Array, enc: M3PEncItems): number; /** * Obtener valor de la promocion que se esta procesando actualmente * @param enc * @param valorPromoAnt * @param valotTotalNuevo */ GetValorPromoACt(enc: M3PEncItems, valorPromoAnt: number, valotTotalNuevo: number, precioTotalAnt: number, bEsAcumulable: boolean): number; /** * Setear el valor de la promocion * @param enc Encabezado de items */ SetValorPromociones(enc: M3PEncItems, valorPromo: number): void; /** * Adicionar a lista de detalle el: NOMB_PROMOC, VAL_PROMOC y ID_PROMOC * @param enc * @param combi */ AgregarListaPromo(enc: M3PEncItems, combi: PromocionCombinada, dValorPromoCombi: number): void; actualizarOCrearPDinamica(arrayDinamicas: Array, nombreDinamica: string, ValorDinamica: string): void; /** * Obtener la lista de encabezados, que aplican a la lista combinada que tiene * @param oPromocionCombinada Objeto de promocion combianda * @param ioM3Proceso Objeto de M3Proceso */ private GetEncabezadoByCombi; SetPromoCombinadaENC(oM3PEncItems: M3PEncItems): void; /** * Crear lista de precios y id de encabezado, teniendo en cuenta la informacion lista de encabezados * @param oListEncab Lista de encabezados a procesar */ private ProcesarPromoCombyByListEnc; /** * ProcesarCombinadaXporY * Procesar promocion combinada que se llevan x productos por el precion de y productos. */ ProcesarCombinadaXporY(oM3Procesos: M3Procesos, m3EncAgregado: M3PEncItems): void; /** * Retorna el total de puntos de fidelizacion en la transacción redondeados hacía abajo * @param oM3Procesos */ get_total_fidelizacion(oM3Procesos: M3Procesos): number; /** * Obtiene el valor del fidelizacion de un proceso, evaluando cada forma de pago * @param proceso * @param list_enc_promo */ get_value_fidelizacion_by_proceso(proceso: M3Procesos, list_enc_promo: Array): number; /** * Retorna las restricciones Activas de tipo de pago a partir de Array * @param listCondiPromoTPRestringido . * @param listM3EncItem */ getRestriccionesTipoPagoActivas(listCondiPromoTPRestringido: Array, listM3EncItem: Array): Array; /** * Retorna las restricciones Activas para los productos del proceso actual * @param listEncPromo * @param listM3EncItem */ getRestriccionesTipoPagoActivasFromEncPromo(listEncPromo: Array, listM3EncItem: Array): M3CONDIPROMO[]; /** * Retorna los movimientos realizados por un m3saldosxcuenta */ m3_get_movimientos_fidelizacion(PostServiceM3: PostServiceM3, idkatios: string, data: any, funcionOK: Function, funcionError: Function): void; /** * Valida si la forma de pago cumple alguna condicion de fidelizacion * @param forma_pago * @param list_condi_promo: listado de condiciones de fidelizacion */ validate_condi_by_forma_pago(forma_pago: M3PEncFP, list_condi_promo: Array): M3CONDIPROMO[]; /** * Retorna el listado de condiciones validas para una actividad dada * @param list_enc_promo */ get_list_condi_promo_by_actividad(list_enc_promo: Array, actividad: string, tipo2: string): Array; /** * Calcula el valor del fidelizacion de una forma de pago de acuerdo a su porcentaje respecto el valor total del proceso * @param pago_total_proceso * @param max_value_fidelizacion * @param value_forma_pago */ calculate_fidelizacion_by_forma_pago(pago_total_proceso: number, listM3Enc: M3PEncItems[], value_forma_pago: number, promosAplicada: Array, list_enc_promo: Array): number; getPorcentajeFidelizacionFromEncPromo(promo: any): any; /** * Adiciona una dinamica con el valor de la fidelización de dicho proceso y retorna dicho proceso * @param proceso * @param list_enc_promo */ add_dinamica_fidelizacion_to_proceso(proceso: M3Procesos, list_enc_promo: Array): M3Procesos; /** * Valida la existencia de un documento de fidelizacion en la tabla M3SaldosXCuenta * @param PostServiceM3 * @param idkatios * @param documento * @param funcionOK * @param funcionError */ validate_doc_fidelizacion(PostServiceM3: PostServiceM3, idkatios: string, data: any, funcionOK: Function, funcionError: Function): void; /** * Actualiza el saldo sumandole el valor enviado * @param PostServiceM3 * @param idkatios * @param data * @param funcionOK * @param funcionError */ actualizar_saldo_fidelizacion(PostServiceM3: PostServiceM3, idkatios: string, data: any, funcionOK: Function, funcionError: Function): void; /** * Genera Un bono de devolucion por el valor dado * @param PostServiceM3 * @param idkatios * @param data = {"proceso",proceso,"valor":valor} * @param funcionOK * @param funcionError */ m3_generar_bono_devolucion(PostServiceM3: PostServiceM3, idkatios: string, data: any, funcionOK: Function, funcionError: Function): void; /** * Crea un nuevo registro en la tabla SaldoXCuenta * @param PostServiceM3 * @param idkatios * @param data * @param funcionOK * @param funcionError */ m3InsertSaldoXCuenta(PostServiceM3: PostServiceM3, idkatios: string, data: any, funcionOK: Function, funcionError: Function): void; getCantidadTotal(M3ENC: Array): number; }