예제 #1
0
파일: TWAIN.cs 프로젝트: mrsalustiano/VS_C
        /// <summary>
        /// Generic DSM when the dest must be a data source...
        /// </summary>
        /// <param name="a_dg">Data group</param>
        /// <param name="a_dat">Data argument type</param>
        /// <param name="a_msg">Operation</param>
        /// <param name="a_twmemref">Pointer to data</param>
        /// <returns>TWAIN status</returns>
        public STS DsmEntry(DG a_dg, DAT a_dat, MSG a_msg, IntPtr a_twmemref)
        {
            STS sts;

            // Submit the work to the TWAIN thread...
            if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId))
            {
                lock (m_lockTwain)
                {
                    // Set our command variables...
                    ThreadData threaddata = default(ThreadData);
                    threaddata.twmemref = a_twmemref;
                    threaddata.dg = a_dg;
                    threaddata.msg = a_msg;
                    threaddata.dat = a_dat;
                    long lIndex = m_twaincommand.Submit(threaddata);

                    // Submit the command and wait for the reply...
                    CallerToThreadSet();
                    ThreadToCallerWaitOne();

                    // Return the result...
                    a_twmemref = m_twaincommand.Get(lIndex).twmemref;
                    sts = m_twaincommand.Get(lIndex).sts;

                    // Clear the command variables...
                    m_twaincommand.Delete(lIndex);
                }
                return (sts);
            }

            // Log it...
            if (Log.GetLevel() > 0)
            {
                Log.LogSendBefore(a_dg.ToString(), a_dat.ToString(), a_msg.ToString(), "");
            }

            // Windows...
            if (ms_platform == Platform.WINDOWS)
            {
                // Issue the command...
                try
                {
                    if (m_blUseLegacyDSM)
                    {
                        sts = (STS)WindowsTwain32DsmEntry(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, a_dat, a_msg, a_twmemref);
                    }
                    else
                    {
                        sts = (STS)WindowsTwaindsmDsmEntry(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, a_dat, a_msg, a_twmemref);
                    }
                }
                catch
                {
                    // The driver crashed...
                    Log.LogSendAfter(STS.BUMMER.ToString(), "");
                    return (STS.BUMMER);
                }
            }

            // Linux...
            else if (ms_platform == Platform.LINUX)
            {
                // Issue the command...
                try
                {
                    if (GetMachineWordBitSize() == 32)
                    {
                        sts = (STS)LinuxDsmEntry(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, a_dat, a_msg, a_twmemref);
                    }
                    else
                    {
                        sts = (STS)Linux64DsmEntry(ref m_twidentityApp, ref m_twidentityDs, a_dg, a_dat, a_msg, a_twmemref);
                    }
                }
                catch
                {
                    // The driver crashed...
                    Log.LogSendAfter(STS.BUMMER.ToString(), "");
                    return (STS.BUMMER);
                }
            }

            // Mac OS X, which has to be different...
            else if (ms_platform == Platform.MACOSX)
            {
                // Issue the command...
                try
                {
                    sts = (STS)MacosxDsmEntry(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.AUDIOINFO, a_msg, a_twmemref);
                }
                catch
                {
                    // The driver crashed...
                    Log.LogSendAfter(STS.BUMMER.ToString(), "");
                    return (STS.BUMMER);
                }
            }

            // Uh-oh...
            else
            {
                Log.LogSendAfter(STS.BUMMER.ToString(), "");
                return (STS.BUMMER);
            }

            // Log it...
            if (Log.GetLevel() > 0)
            {
                Log.LogSendAfter(sts.ToString(), "");
            }

            // All done...
            return (AutoDatStatus(sts));
        }
예제 #2
0
        public async Task <ActionResult> Post([FromBody] PedidosModel pedidom)
        {
            PedidosModel pedidoClone                      = new PedidosModel();
            string       listaProductosRecibidos          = "";
            string       listaProductosRecibidosCalculado = "";

            int      result = 0;
            string   msj = "¡Error al agregar pedido intente más tarde!", fecha_entrega = "";
            DateTime DAT;

            try
            {
                TiendasModel tienda1 = new TiendasModel();
                tienda1.PK = pedidom.PK_TIENDA;
                tienda1.obtenerTiendaPorPK();

                try
                { //Formato "martes 5 de mayo 2020"
                    DAT = DateTime.Parse(pedidom.FECHA_ENTREGA, CultureInfo.CreateSpecificCulture("es-MX"));
                }
                catch (Exception e) {
                    LogModel.registra("Error Agregar pedido al convertir fecha:", e.ToString() + " {FECHA_ENTREGA=" + pedidom.FECHA_ENTREGA + "}");
                    try//Formato "martes 5 de mayo 2020"
                    {
                        string[] fecha = pedidom.FECHA_ENTREGA.Split(" ");
                        DAT = DateTime.Parse(fecha[4] + "-" + fecha[3] + "-" + fecha[1], CultureInfo.CreateSpecificCulture("es-MX"));
                    }
                    catch (Exception e1) {//en caso de no poder convertir la fecha que recibo tengo que calcularla
                        LogModel.registra("Error Agregar pedido al convertir fecha:", e1.ToString());

                        if (pedidom.PK_COSTO_ENVIO.Equals("2"))//ESPRESS
                        {
                            DAT = DateTime.Now.AddDays(1);
                        }
                        else  //calculo entrega normal
                        {
                            DAT = obtenerFechaEntrega(tienda1, pedidom.PK_POLIGONO);
                        }
                    }
                }

                fecha_entrega         = DAT.ToString("dddd dd ", CultureInfo.CreateSpecificCulture("es-MX")) + "de" + DAT.ToString(" MMMM yyyy", CultureInfo.CreateSpecificCulture("es-MX"));
                pedidom.FECHA_ENTREGA = DAT.ToString("yyyy-MM-dd");

                //COPIA TODO EL CONTENIDO A UN NUEVO PEDIDO PARA VOLVER A CALCULAR PRECIOS DE PRODUCTO, SUBTOTAL, TOTAL DEL PEDIDO
                pedidoClone.PK_CLIENTE        = pedidom.PK_CLIENTE;
                pedidoClone.DIRECCION         = pedidom.DIRECCION;
                pedidoClone.LATITUD           = pedidom.LATITUD;
                pedidoClone.LONGITUD          = pedidom.LONGITUD;
                pedidoClone.PK_TIENDA         = pedidom.PK_TIENDA;
                pedidoClone.ENVIO             = pedidom.ENVIO;
                pedidoClone.SUBTOTAL          = pedidom.SUBTOTAL;
                pedidoClone.COMISION_TARJETA  = pedidom.COMISION_TARJETA;
                pedidoClone.TOTAL             = pedidom.TOTAL;
                pedidoClone.METODO_PAGO       = pedidom.METODO_PAGO;
                pedidoClone.PK_COSTO_ENVIO    = pedidom.PK_COSTO_ENVIO;
                pedidoClone.FECHA_ENTREGA     = pedidom.FECHA_ENTREGA;
                pedidoClone.CODIGO_DESCUENTO  = pedidom.CODIGO_DESCUENTO;
                pedidoClone.DESCUENTO         = pedidom.DESCUENTO;
                pedidoClone.SOURCE_ID         = pedidom.SOURCE_ID;
                pedidoClone.DEVICE_SESSION_ID = pedidom.DEVICE_SESSION_ID;
                pedidoClone.CVV2        = pedidom.CVV2;
                pedidoClone.COSTUMER_ID = pedidom.COSTUMER_ID;
                pedidoClone.LISTA       = new List <PedidoDetalleModel>();

                if (pedidom.LISTA != null)
                {
                    double             Total = 0;
                    PedidoDetalleModel aux;
                    ProductosModel     producto = new ProductosModel();
                    foreach (PedidoDetalleModel detalle in pedidom.LISTA)
                    {
                        producto.PK = detalle.PK_PRODUCTO;

                        aux             = new PedidoDetalleModel();
                        aux.PK          = detalle.PK;
                        aux.PK_PEDIDO   = detalle.PK_PEDIDO;
                        aux.PK_PRODUCTO = detalle.PK_PRODUCTO;
                        aux.PRODUCTO    = detalle.PRODUCTO;
                        aux.DESCRIPCION = detalle.DESCRIPCION;
                        aux.TIENDA      = detalle.TIENDA;
                        if (producto.getPrecioByPK())
                        {
                            try
                            {
                                aux.PRECIO = double.Parse(producto.PRECIO);
                            }
                            catch (Exception e) {
                                LogModel.registra("Agregar pedido error al obtener precio de producto", e.ToString());
                                aux.PRECIO = 0;
                            }
                        }
                        else
                        {
                            LogModel.registra("Precio del producto no encotrado", "PK_PRODUCTO:" + detalle.PK_PRODUCTO + ", PRECIO:" + detalle.PRECIO);
                            aux.PRECIO = detalle.PRECIO;
                        }
                        aux.CANTIDAD  = detalle.CANTIDAD;
                        aux.DETALLES  = detalle.DETALLES;
                        aux.IMAGEN    = detalle.IMAGEN;
                        aux.BORRADO   = detalle.BORRADO;
                        aux.FECHA_C   = detalle.FECHA_C;
                        aux.FECHA_M   = detalle.FECHA_M;
                        aux.FECHA_D   = detalle.FECHA_D;
                        aux.USUARIO_C = detalle.USUARIO_C;
                        aux.USUARIO_M = detalle.USUARIO_M;
                        aux.USUARIO_D = detalle.USUARIO_D;

                        Total += (aux.CANTIDAD * aux.PRECIO);

                        pedidoClone.LISTA.Add(aux);

                        listaProductosRecibidos += "{PK_PRODUCTO:" + detalle.PK_PRODUCTO
                                                   + ",PRECIO:" + detalle.PRECIO
                                                   + ",CANTIDAD:" + detalle.CANTIDAD
                                                   + ",DETALLES:" + detalle.DETALLES
                                                   + "},";

                        listaProductosRecibidosCalculado += "{PK_PRODUCTO:" + aux.PK_PRODUCTO
                                                            + ",PRECIO:" + aux.PRECIO
                                                            + ",CANTIDAD:" + aux.CANTIDAD
                                                            + ",DETALLES:" + aux.DETALLES
                                                            + "},";
                    }
                    pedidoClone.SUBTOTAL = Total;
                    CostosEnviosModel ce = new CostosEnviosModel();
                    ce.PK = pedidoClone.PK_COSTO_ENVIO;

                    if (ce.getCostoByPk())
                    {
                        Total += ((ce.COSTO) - (ce.COSTO * pedidoClone.DESCUENTO / 100));
                    }
                    else
                    {
                        Total += ce.COSTO;
                    }

                    double factor           = double.Parse(VariablesModel.getVariableValue("FACTOR"));
                    double suma             = double.Parse(VariablesModel.getVariableValue("SUMA"));
                    double COMISION_TARJETA = 0;

                    if (factor > 0)
                    {
                        COMISION_TARJETA = Total * factor;
                    }
                    COMISION_TARJETA            += suma;
                    pedidoClone.COMISION_TARJETA = COMISION_TARJETA;
                    pedidoClone.TOTAL            = Total + COMISION_TARJETA;
                }


                if (pedidoClone.agregar())
                {
                    try {
                        PedidosRecibidosModel prm = new PedidosRecibidosModel();
                        prm.PK_PEDIDO = long.Parse(pedidoClone.PK);
                        prm.RECIBIDO  = "{PK:" + pedidom.PK + ",PK_CLIENTE:" + pedidom.PK_CLIENTE
                                        + ",DIRECCION:\"" + pedidom.DIRECCION + "\",LATITUD:\"" + pedidom.LATITUD
                                        + "\",LONGITUD:\"" + pedidom.LONGITUD + "\",SUBTOTAL:" + pedidom.SUBTOTAL
                                        + ",ENVIO:" + pedidom.ENVIO + ",COMISION_TARJETA:" + pedidom.COMISION_TARJETA
                                        + ",TOTAL:" + pedidom.TOTAL + ",METODO_PAGO:\"" + pedidom.METODO_PAGO
                                        + "\",PK_TIENDA:" + pedidom.PK_TIENDA + ",PK_COSTO_ENVIO:" + pedidom.PK_COSTO_ENVIO
                                        + ",CODIGO_DESCUENTO:" + pedidom.CODIGO_DESCUENTO + ",DESCUENTO:" + pedidom.DESCUENTO
                                        + ",LISTA:[" + listaProductosRecibidos + "]"
                                        + "}";
                        prm.CALCULADO = "{PK:" + pedidoClone.PK + ",PK_CLIENTE:" + pedidoClone.PK_CLIENTE
                                        + ",DIRECCION:\"" + pedidoClone.DIRECCION + "\",LATITUD:\"" + pedidoClone.LATITUD
                                        + "\",LONGITUD:\"" + pedidoClone.LONGITUD + "\",SUBTOTAL:" + pedidoClone.SUBTOTAL
                                        + ",ENVIO:" + pedidoClone.ENVIO + ",COMISION_TARJETA:" + pedidoClone.COMISION_TARJETA
                                        + ",TOTAL:" + pedidoClone.TOTAL + ",METODO_PAGO:\"" + pedidoClone.METODO_PAGO
                                        + "\",PK_TIENDA:" + pedidoClone.PK_TIENDA + ",PK_COSTO_ENVIO:" + pedidoClone.PK_COSTO_ENVIO
                                        + ",CODIGO_DESCUENTO:" + pedidoClone.CODIGO_DESCUENTO + ",DESCUENTO:" + pedidoClone.DESCUENTO
                                        + ",LISTA:[" + listaProductosRecibidos + "]"
                                        + "}";
                        prm.agregar();
                    } catch (Exception exc) {
                        LogModel.registra("Error al registrar PedidosRecibidos AgregarPedidoController", exc.ToString());
                    }

                    try {
                        DireccionesClientesModel dir = new DireccionesClientesModel();
                        dir.LATITUD    = pedidoClone.LATITUD;
                        dir.LONGITUD   = pedidoClone.LONGITUD;
                        dir.PK_CLIENTE = pedidoClone.PK_CLIENTE;
                        dir.DIRECCION  = pedidoClone.DIRECCION;

                        if (dir.existeDireccion())
                        {
                            dir.CONTADOR++;
                            dir.actualizaContador();
                        }
                        else
                        {
                            dir.CONTADOR = 1;
                            dir.creaDireccion();
                        }
                    } catch (Exception e) {
                        LogModel.registra("Error al guardar dirección AgregarPedidoController", e.ToString());
                    }

                    if (!pedidoClone.SOURCE_ID.Equals("EFECTIVO") && !pedidoClone.SOURCE_ID.Equals("TERMINAL"))
                    {
                        if (pedidoClone.pagar())
                        {
                            try
                            {
                                NotificacionesModel notifica = new NotificacionesModel();
                                TiendasModel        tienda   = new TiendasModel();
                                tienda.PK = pedidoClone.PK_TIENDA;
                                ClientesModel cliente = new ClientesModel();
                                cliente.PK = pedidoClone.PK_CLIENTE;

                                if (tienda.obtenerTiendaPorPK() && cliente.getTokenClienteByPk())
                                {
                                    notifica.TITLE   = "Nuevo pedido";
                                    notifica.MESSAGE = cliente.NOMBRE + " ha registrado un nuevo pedido: " + pedidoClone.PK;
                                    notifica.TOKENS.Add(tienda.TOKEN);
                                    await notifica.sendNotificationAsync();
                                }
                            }
                            catch (Exception e)
                            {
                                LogModel.registra("Error al enviar notificación", e.ToString());
                            }

                            result = 1;
                            msj    = "¡Pedido agregado!";
                        }
                        else
                        {
                            result = 0;
                            if (!string.IsNullOrEmpty(pedidoClone.ERROR))
                            {
                                msj = pedidoClone.ERROR;
                            }
                            else
                            {
                                msj = "¡Ocurriò un error al procesar pago intente más tarde!";
                            }
                        }
                    }
                    else
                    {
                        try
                        {
                            NotificacionesModel notifica = new NotificacionesModel();
                            TiendasModel        tienda   = new TiendasModel();
                            tienda.PK = pedidoClone.PK_TIENDA;
                            ClientesModel cliente = new ClientesModel();
                            cliente.PK = pedidoClone.PK_CLIENTE;

                            if (tienda.obtenerTiendaPorPK() && cliente.getTokenClienteByPk())
                            {
                                notifica.TITLE   = "Nuevo pedido";
                                notifica.MESSAGE = cliente.NOMBRE + " ha registrado un nuevo pedido: " + pedidoClone.PK;
                                notifica.TOKENS.Add(tienda.TOKEN);
                                await notifica.sendNotificationAsync();
                            }
                        }
                        catch (Exception e)
                        {
                            LogModel.registra("Error al enviar notificación", e.ToString());
                        }

                        result = 1;
                        msj    = "¡Pedido agregado!";
                    }
                }
            }
            catch (Exception e)
            {
                result = 0;
                msj    = "¡Error al agregar pedido intente más tarde!";
                LogModel.registra("Error al agregar pedido", e.ToString());
            }

            return(Ok(new
            {
                resultado = result,
                mensaje = msj,
                pedido = pedidoClone,
                entrega = fecha_entrega
            }));
        }