private void GrabarOrdenDeVenta(object sender, IList <OrdenDeVentaDetalle> detalle, string gps)
        {
            try
            {
                decimal total = 0;
                foreach (var itemOrden in OrdenDeVentaDetalles)
                {
                    total += itemOrden.TOTAL_LINE;
                }

                OrdenDeVentaEncabezado ordenDeVentaEncabezado = new OrdenDeVentaEncabezado();

                ordenDeVentaEncabezado.CLIENT_ID      = UiListaCliente.GridView.GetRowValues(UiListaCliente.GridView.FocusedRowIndex, "CODE_CUSTOMER").ToString();
                ordenDeVentaEncabezado.POS_TERMINAL   = Usuario.SELLER_ROUTE;
                ordenDeVentaEncabezado.GPS_URL        = gps;
                ordenDeVentaEncabezado.TOTAL_AMOUNT   = total;
                ordenDeVentaEncabezado.POSTED_BY      = Session["LOGIN"].ToString();
                ordenDeVentaEncabezado.GPS_EXPECTED   = UiListaCliente.GridView.GetRowValues(UiListaCliente.GridView.FocusedRowIndex, "GPS").ToString();
                ordenDeVentaEncabezado.DELIVERY_DATE  = UiFechaDeEntrega.Date;
                ordenDeVentaEncabezado.CODE_WAREHOUSE = Usuario.PRESALE_WAREHOUSE;
                ordenDeVentaEncabezado.DOC_SERIE      = Usuario.DOC_SERIE;
                ordenDeVentaEncabezado.DOC_NUM        = Usuario.DOC_NUM;
                ordenDeVentaEncabezado.DISCOUNT       = UiSpinDescuentoAplicado.Number;
                ordenDeVentaEncabezado.REFERENCE_ID   = (ordenDeVentaEncabezado.POS_TERMINAL + DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss") + "-" + ordenDeVentaEncabezado.DOC_NUM);

                ordenDeVentaEncabezado.Detalles = detalle;
                UsuarioDeseaGrabarOrdenDeVenta?.Invoke(sender, new OrdenDeVentaArgumento {
                    Data = ordenDeVentaEncabezado
                });
            }
            catch (Exception ex)
            {
                EstablecerError(ex.Message, sender);
            }
        }
Ejemplo n.º 2
0
        public Operacion CambiarFechaDeEntregaAOrdenDeVenta(OrdenDeVentaEncabezado ordenDeVentaEncabezado)
        {
            try
            {
                Operacion     op;
                DbParameter[] parameters =
                {
                    new OAParameter
                    {
                        ParameterName = "@DOC_SERIE",
                        Value         = ordenDeVentaEncabezado.DOC_SERIE
                    }
                    , new OAParameter
                    {
                        ParameterName = "@DOC_NUM",
                        Value         = ordenDeVentaEncabezado.DOC_NUM
                    }
                    , new OAParameter
                    {
                        ParameterName = "@DELIVERY_DATE",
                        Value         = ordenDeVentaEncabezado.DELIVERY_DATE
                    }
                };

                op =
                    BaseDeDatosServicio.ExecuteQuery <Operacion>("SWIFT_SP_UPDATE_DELIVERY_DATE_BY_SALES_ORDER", CommandType.StoredProcedure,
                                                                 parameters)[0];

                if (op.Resultado == ResultadoOperacionTipo.Error)
                {
                    BaseDeDatosServicio.Rollback();
                    return(op);
                }
                return(op);
            }
            catch (DbException e)
            {
                BaseDeDatosServicio.Rollback();
                return(new Operacion
                {
                    Codigo = e.ErrorCode,
                    Mensaje = e.HumanReadMessage(),
                    Resultado = Tipos.ResultadoOperacionTipo.Error
                });
            }
            catch (Exception ex)
            {
                BaseDeDatosServicio.Rollback();
                return(new Operacion
                {
                    Codigo = -1,
                    Mensaje = ex.Message,
                    Resultado = Tipos.ResultadoOperacionTipo.Error
                });
            }
        }
        private Operacion CrearPolizaDeDespachoDeUnaOrdenDeVenta(OrdenDeVentaEncabezado encabezado, string login, TipoFuenteDemandaDespacho tipoFuente)
        {
            var poliza = new Poliza
            {
                FECHA_LLEGADA      = DateTime.Now,
                LAST_UPDATED_BY    = login,
                LAST_UPDATED       = DateTime.Now,
                CLIENT_CODE        = encabezado.SOURCE_NAME,
                FECHA_DOCUMENTO    = DateTime.Now,
                EXTERNAL_SOURCE_ID = encabezado.EXTERNAL_SOURCE_ID,
                SALES_ORDER_ID     = encabezado.SALES_ORDER_ID
            };
            var op = new Operacion();

            DbParameter[] parameters =
            {
                new OAParameter
                {
                    ParameterName = "@DOC_ID",
                    Value         = 0
                },
                new OAParameter
                {
                    ParameterName = "@FECHA_LLEGADA",
                    Value         = poliza.FECHA_LLEGADA
                }, new OAParameter
                {
                    ParameterName = "@LAST_UPDATED_BY",
                    Value         = poliza.LAST_UPDATED_BY
                }, new OAParameter
                {
                    ParameterName = "@LAST_UPDATED",
                    Value         = poliza.LAST_UPDATED
                }, new OAParameter
                {
                    ParameterName = "@CLIENT_CODE",
                    Value         = poliza.CLIENT_CODE
                }, new OAParameter
                {
                    ParameterName = "@FECHA_DOCUMENTO",
                    Value         = poliza.FECHA_DOCUMENTO
                }, new OAParameter
                {
                    ParameterName = "@TIPO",
                    Value         = poliza.TIPO
                }, new OAParameter
                {
                    ParameterName = "@CODIGO_POLIZA",
                    Value         = poliza.SALES_ORDER_ID + "-" + Enums.GetStringValue(tipoFuente).Replace(" ", "") + '-' + poliza.CLIENT_CODE
                }
            };
            op = BaseDeDatosServicio.ExecuteQuery <Operacion>(BaseDeDatosServicio.Esquema + ".OP_WMS_SP_INSERT_POLIZA_HEADER", CommandType.StoredProcedure, false, parameters)[0];
            return(op);
        }
Ejemplo n.º 4
0
 public IList <OrdenDeVentaDetalle> ObtenerDetalleDeOrdenesDeVenta(OrdenDeVentaEncabezado ordenDeVentaEncabezado)
 {
     DbParameter[] parameters =
     {
         new OAParameter
         {
             ParameterName = "@SALES_ORDERS_IDS",
             Value         = ordenDeVentaEncabezado.SALES_ORDERS_IDS
         }
     };
     return(BaseDeDatosServicio.ExecuteQuery <OrdenDeVentaDetalle>("SWIFT_SP_GET_DETAIL_SALES_ORDER_FOR_PICKING", CommandType.StoredProcedure, parameters));
 }
Ejemplo n.º 5
0
        public Operacion AutorizarOrdenDeVenta(OrdenDeVentaEncabezado ordenDeVentaEncabezado)
        {
            try
            {
                BaseDeDatosServicio.BeginTransaction();
                Operacion     op;
                DbParameter[] parameters =
                {
                    new OAParameter
                    {
                        ParameterName = "@SALES_ORDER_ID",
                        Value         = ordenDeVentaEncabezado.SALES_ORDER_ID
                    }
                    , new OAParameter
                    {
                        ParameterName = "@LOGIN",
                        Value         = ordenDeVentaEncabezado.LOGIN
                    }
                };

                op =
                    BaseDeDatosServicio.ExecuteQuery <Operacion>("SWIFT_SP_AUTHORIZE_SALES_ORDER", CommandType.StoredProcedure,
                                                                 parameters)[0];

                if (op.Resultado == ResultadoOperacionTipo.Error)
                {
                    BaseDeDatosServicio.Rollback();
                    return(op);
                }
                return(op);
            }
            catch (DbException e)
            {
                BaseDeDatosServicio.Rollback();
                return(new Operacion
                {
                    Codigo = e.ErrorCode,
                    Mensaje = e.HumanReadMessage(),
                    Resultado = Tipos.ResultadoOperacionTipo.Error
                });
            }
            catch (Exception ex)
            {
                BaseDeDatosServicio.Rollback();
                return(new Operacion
                {
                    Codigo = -1,
                    Mensaje = ex.Message,
                    Resultado = Tipos.ResultadoOperacionTipo.Error
                });
            }
        }
Ejemplo n.º 6
0
 public IList <OrdenDeVentaDetalle> ObtenerDetallePorOrdenDeVenta(OrdenDeVentaEncabezado ordenDeVentaEncabezado)
 {
     DbParameter[] parameters =
     {
         new OAParameter
         {
             ParameterName = "@SALES_ORDER_ID",
             Value         = ordenDeVentaEncabezado.SALES_ORDER_ID
         }
     };
     return(BaseDeDatosServicio.ExecuteQuery <OrdenDeVentaDetalle>("SONDA_SP_GET_DETAIL_X_SALE_ORDER",
                                                                   CommandType.StoredProcedure, parameters));
 }
        private Poliza CrearPoliza(PickingArgumento argumento, OrdenDeVentaEncabezado encabezado)
        {
            var operacionPoliza = CrearPolizaDeDespachoDeUnaOrdenDeVenta(encabezado, argumento.Login, argumento.TipoDespacho);

            if (operacionPoliza.Resultado == ResultadoOperacionTipo.Error)
            {
                throw new Exception("Error. No se pudo crear la poliza de despacho " + encabezado.SALES_ORDER_ID + ": " + operacionPoliza.Mensaje);
            }

            var poliza = new Poliza {
                CODIGO_POLIZA = operacionPoliza.DbData
            };

            return(poliza);
        }
Ejemplo n.º 8
0
 public IList <OrdenDeVentaDetalle> ObtenerOrdenVentaDetalle(OrdenDeVentaEncabezado encabezado)
 {
     DbParameter[] parameters =
     {
         new OAParameter
         {
             ParameterName = "@SALES_ORDER_ID",
             Value         = encabezado.SALES_ORDER_ID
         },
         new OAParameter
         {
             ParameterName = "@EXTERNAL_SOURCE_ID",
             Value         = encabezado.EXTERNAL_SOURCE_ID
         }
     };
     return(BaseDeDatosServicio.ExecuteQuery <OrdenDeVentaDetalle>(BaseDeDatosServicio.Esquema + ".OP_WMS_SP_GET_SALE_ORDER_DETAIL_FROM_EXTERNAL", CommandType.StoredProcedure, parameters).ToList());
 }
Ejemplo n.º 9
0
        public Operacion MarcarOrdenDeVentaConPicking(OrdenDeVentaEncabezado ordenDeVenta)
        {
            BaseDeDatosServicio.BeginTransaction();
            try
            {
                DbParameter[] parameters =
                {
                    new OAParameter
                    {
                        ParameterName = "@SALES_ORDER_ID",
                        Value         = ordenDeVenta.SALES_ORDER_ID
                    },
                    new OAParameter
                    {
                        ParameterName = "@EXTERNAL_SOURCE_ID",
                        Value         = ordenDeVenta.EXTERNAL_SOURCE_ID
                    }
                };

                var op = BaseDeDatosServicio.ExecuteQuery <Operacion>(BaseDeDatosServicio.Esquema + ".OP_WMS_SP_SET_SALE_ORDER_MAKE_PICKING_FROM_EXTERNAL_SOURCE", CommandType.StoredProcedure, parameters)[0];
                BaseDeDatosServicio.Commit();
                return(op);
            }
            catch (DbException e)
            {
                BaseDeDatosServicio.Rollback();
                return(new Operacion
                {
                    Codigo = e.ErrorCode,
                    Mensaje = e.Message,
                    Resultado = ResultadoOperacionTipo.Error
                });
            }
            catch (Exception ex)
            {
                BaseDeDatosServicio.Rollback();
                return(new Operacion
                {
                    Codigo = -1,
                    Mensaje = ex.Message,
                    Resultado = ResultadoOperacionTipo.Error
                });
            }
        }
Ejemplo n.º 10
0
 public IList <OrdenDeVentaEncabezado> ObtenerOrdenDeVentaPorFecha(OrdenDeVentaEncabezado ordenDeVentaEncabezado)
 {
     DbParameter[] parameters =
     {
         new OAParameter
         {
             ParameterName = "@POSTED_DATETIME",
             Value         = ordenDeVentaEncabezado.POSTED_DATETIME
         },
         new OAParameter
         {
             ParameterName = "@CLOSED_ROUTE_DATETIME",
             Value         = ordenDeVentaEncabezado.CLOSED_ROUTE_DATETIME
         },
         new OAParameter
         {
             ParameterName = "@LOGIN",
             Value         = ordenDeVentaEncabezado.LOGIN
         }
     };
     return(BaseDeDatosServicio.ExecuteQuery <OrdenDeVentaEncabezado>("SONDA_SP_GET_SALE_X_DATE",
                                                                      CommandType.StoredProcedure, parameters));
 }
Ejemplo n.º 11
0
        /// <summary>
        /// Evento de vista de control
        /// </summary>
        protected void UiVisOrdenesVenta_CustomCallback(object sender, DevExpress.Web.ASPxGridViewCustomCallbackEventArgs e)
        {
            if (!ValidarConexionYUsuarioLogueado(sender))
            {
                return;
            }
            OrdenDeVentaEncabezado ordenDeVentaEncabezado = new OrdenDeVentaEncabezado();

            switch (e.Parameters.Split('-')[0])
            {
            case "ObtenerOrdenesVenta":

                ordenDeVentaEncabezado.POSTED_DATETIME       = DateTime.Parse(UiFechaInicio.Value.ToString());
                ordenDeVentaEncabezado.CLOSED_ROUTE_DATETIME = DateTime.Parse(UiFechaFinal.Value.ToString());
                ordenDeVentaEncabezado.LOGIN = Session["LOGIN"].ToString();
                if (ordenDeVentaEncabezado.POSTED_DATETIME > ordenDeVentaEncabezado.CLOSED_ROUTE_DATETIME)
                {
                    UiVisOrdenesVenta.JSProperties.Add("cpError", "La fecha inicio es mayor a la fecha final");
                }
                else
                {
                    UsuarioDesesaObtenerOrdenesDeVenta?.Invoke(sender, new OrdenVentaArgumento {
                        Data = ordenDeVentaEncabezado
                    });
                }
                break;

            case "Anular":
                var ordenDeVentaAnular = UiVisOrdenesVenta.GetRowValues(int.Parse(e.Parameters.Split('-')[1]), "SALES_ORDER_ID;DOC_SERIE;DOC_NUM");
                ordenDeVentaEncabezado.POSTED_DATETIME       = DateTime.Parse(UiFechaInicio.Value.ToString());
                ordenDeVentaEncabezado.CLOSED_ROUTE_DATETIME = DateTime.Parse(UiFechaFinal.Value.ToString());
                ordenDeVentaEncabezado.LOGIN          = Session["LOGIN"].ToString();
                ordenDeVentaEncabezado.SALES_ORDER_ID = int.Parse(ordenDeVentaAnular.ToString().Split('|')[0]);
                ordenDeVentaEncabezado.DOC_SERIE      = ordenDeVentaAnular.ToString().Split('|')[1];
                ordenDeVentaEncabezado.DOC_NUM        = int.Parse(ordenDeVentaAnular.ToString().Split('|')[2]);
                ordenDeVentaEncabezado.IS_VOID        = "1";
                UsuarioDeseaCancelarOrdenDeVenta?.Invoke(sender, new OrdenVentaArgumento {
                    Data = ordenDeVentaEncabezado
                });
                break;

            case "CambiarFechaDeEntrega":
                var ordenDeVentaVista = (OrdenDeVentaEncabezado)UiVisOrdenesVenta.GetRow(int.Parse(e.Parameters.Split('-')[1]));

                if (DateTime.Parse(UiFechaOrdenDeVenta.Value.ToString()).Date < DateTime.Today.Date)
                {
                    UiVisOrdenesVenta.JSProperties.Add("cpErrorFecha", "La fecha tiene que ser mayor o igual a la fecha actual.");
                }

                else if (ordenDeVentaVista.DELIVERY_DATE != null && DateTime.Parse(UiFechaOrdenDeVenta.Value.ToString()).Date == DateTime.Today.Date && e.Parameters.Split('-')[2] == "0")
                {
                    UiVisOrdenesVenta.JSProperties.Add("cpAdvertenciaFecha", "Selecciono la fecha hoy, no podra anular la orden de venta. Desea continuar?");
                }
                else
                {
                    ordenDeVentaEncabezado.POSTED_DATETIME       = DateTime.Parse(UiFechaInicio.Value.ToString());
                    ordenDeVentaEncabezado.CLOSED_ROUTE_DATETIME = DateTime.Parse(UiFechaFinal.Value.ToString());
                    ordenDeVentaEncabezado.LOGIN          = Session["LOGIN"].ToString();
                    ordenDeVentaEncabezado.SALES_ORDER_ID = ordenDeVentaVista.SALES_ORDER_ID;
                    ordenDeVentaEncabezado.DOC_SERIE      = ordenDeVentaVista.DOC_SERIE;
                    ordenDeVentaEncabezado.DOC_NUM        = ordenDeVentaVista.DOC_NUM;
                    ordenDeVentaEncabezado.DELIVERY_DATE  = DateTime.Parse(UiFechaOrdenDeVenta.Value.ToString()).Date;


                    UsuarioDeseaCambiarFechaDeEntrega?.Invoke(sender, new OrdenVentaArgumento {
                        Data = ordenDeVentaEncabezado
                    });

                    UiVisOrdenesVenta.JSProperties.Add("cpCerrarPopupFecha", "Enabled");
                }

                break;
            }
        }
Ejemplo n.º 12
0
        public Operacion CrearOrdenDeVenta(OrdenDeVentaEncabezado ordenDeVentaEncabezado)
        {
            try
            {
                DbParameter[] parameters =
                {
                    new OAParameter
                    {
                        ParameterName = "@CLIENT_ID",
                        Value         = ordenDeVentaEncabezado.CLIENT_ID
                    },
                    new OAParameter
                    {
                        ParameterName = "@POS_TERMINAL",
                        Value         = ordenDeVentaEncabezado.POS_TERMINAL
                    },
                    new OAParameter
                    {
                        ParameterName = "@GPS_URL",
                        Value         = ordenDeVentaEncabezado.GPS_URL
                    }
                    , new OAParameter
                    {
                        ParameterName = "@TOTAL_AMOUNT",
                        Value         = ordenDeVentaEncabezado.TOTAL_AMOUNT
                    }
                    , new OAParameter
                    {
                        ParameterName = "@POSTED_BY",
                        Value         = ordenDeVentaEncabezado.POSTED_BY
                    }
                    , new OAParameter
                    {
                        ParameterName = "@GPS_EXPECTED",
                        Value         = ordenDeVentaEncabezado.GPS_EXPECTED
                    }
                    , new OAParameter
                    {
                        ParameterName = "@DELIVERY_DATE",
                        Value         = ordenDeVentaEncabezado.DELIVERY_DATE
                    }
                    , new OAParameter
                    {
                        ParameterName = "@REFERENCE_ID",
                        Value         = ordenDeVentaEncabezado.REFERENCE_ID
                    }
                    , new OAParameter
                    {
                        ParameterName = "@WAREHOUSE",
                        Value         = ordenDeVentaEncabezado.CODE_WAREHOUSE
                    }
                    , new OAParameter
                    {
                        ParameterName = "@DOC_SERIE",
                        Value         = ordenDeVentaEncabezado.DOC_SERIE
                    }
                    , new OAParameter
                    {
                        ParameterName = "@DOC_NUM",
                        Value         = (ordenDeVentaEncabezado.DOC_NUM + 1)
                    }
                    , new OAParameter
                    {
                        ParameterName = "@DISCOUNT",
                        Value         = ordenDeVentaEncabezado.DISCOUNT
                    }
                };

                var op =
                    BaseDeDatosServicio.ExecuteQuery <Operacion>("SWIFT_SP_INSERT_SALES_ORDER_HEADER", CommandType.StoredProcedure,
                                                                 parameters)[0];

                if (op.Resultado == ResultadoOperacionTipo.Exito)
                {
                    var id = op.DbData;
                    foreach (OrdenDeVentaDetalle detalle in ordenDeVentaEncabezado.Detalles)
                    {
                        DbParameter[] parametersDetails =
                        {
                            new OAParameter
                            {
                                ParameterName = "@SALES_ORDER_ID",
                                Value         = id
                            }
                            , new OAParameter
                            {
                                ParameterName = "@SKU",
                                Value         = detalle.SKU
                            }
                            , new OAParameter
                            {
                                ParameterName = "@LINE_SEQ",
                                Value         = detalle.LINE_SEQ
                            }
                            , new OAParameter
                            {
                                ParameterName = "@QTY",
                                Value         = detalle.QTY
                            }
                            , new OAParameter
                            {
                                ParameterName = "@PRICE",
                                Value         = detalle.PRICE
                            }
                            , new OAParameter
                            {
                                ParameterName = "@DISCOUNT",
                                Value         = detalle.DISCOUNT
                            }
                            , new OAParameter
                            {
                                ParameterName = "@TOTAL_LINE",
                                Value         = detalle.TOTAL_LINE
                            }
                            , new OAParameter
                            {
                                ParameterName = "@COMBO_REFERENCE",
                                Value         = detalle.COMBO_REFERENCE
                            }
                            , new OAParameter
                            {
                                ParameterName = "@CODE_WAREHOUSE",
                                Value         = ordenDeVentaEncabezado.CODE_WAREHOUSE
                            }
                        };

                        op = BaseDeDatosServicio.ExecuteQuery <Operacion>("SWIFT_SP_INSERT_SALES_ORDER_DETAIL", CommandType.StoredProcedure, false, parametersDetails)[0];

                        if (op.Resultado == ResultadoOperacionTipo.Error)
                        {
                            BaseDeDatosServicio.Rollback();
                            return(op);
                        }
                    }
                    if (op.Resultado == ResultadoOperacionTipo.Exito)
                    {
                        DbParameter[] parametersDocument =
                        {
                            new OAParameter
                            {
                                ParameterName = "@DOC_TYPE",
                                Value         = Enums.GetStringValue(DocumentoTipo.OrdenDeVenta)
                            }
                            , new OAParameter
                            {
                                ParameterName = "@DOC_SERIE",
                                Value         = ordenDeVentaEncabezado.DOC_SERIE
                            }
                            , new OAParameter
                            {
                                ParameterName = "@DOC_NUM",
                                Value         = (ordenDeVentaEncabezado.DOC_NUM + 1)
                            }
                        };
                        op = BaseDeDatosServicio.ExecuteQuery <Operacion>("SONDA_SP_UPDATE_DOCUMENT_SEQUENCE_BO", CommandType.StoredProcedure, false, parametersDocument)[0];
                        if (op.Resultado == ResultadoOperacionTipo.Error)
                        {
                            BaseDeDatosServicio.Rollback();
                            return(op);
                        }
                        BaseDeDatosServicio.Commit();
                        return(op);
                    }
                    BaseDeDatosServicio.Rollback();
                    return(op);
                }
                BaseDeDatosServicio.Rollback();
                return(op);
            }
            catch (DbException e)
            {
                BaseDeDatosServicio.Rollback();
                return(new Operacion
                {
                    Codigo = e.ErrorCode,
                    Mensaje = e.HumanReadMessage(),
                    Resultado = Tipos.ResultadoOperacionTipo.Error
                });
            }
            catch (Exception ex)
            {
                BaseDeDatosServicio.Rollback();
                return(new Operacion
                {
                    Codigo = -1,
                    Mensaje = ex.Message,
                    Resultado = Tipos.ResultadoOperacionTipo.Error
                });
            }
        }
        private int CrearDocumentoDemandaDespacho(PickingArgumento argumento, OrdenDeVentaEncabezado encabezado, int wavePickingId, IList <Picking> pickings)
        {
            var tipoDespacho = Enums.GetStringValue(TipoDemandaDespacho.OrdenVenta);

            if (argumento.TipoDespacho == TipoFuenteDemandaDespacho.SolicitudTrasladoErp ||
                argumento.TipoDespacho == TipoFuenteDemandaDespacho.SolicitudTrasladoWms)
            {
                tipoDespacho = Enums.GetStringValue(TipoDemandaDespacho.SolicitudTraslado);
            }

            var demandaHeader = new DemandaDespachoHeader
            {
                IS_FROM_SONDA      = encabezado.IS_FROM_SONDA,
                IS_FROM_ERP        = encabezado.IS_FROM_ERP,
                LAST_UPDATE_BY     = argumento.Login,
                CLIENT_CODE        = encabezado.CLIENT_ID,
                CUSTOMER_NAME      = encabezado.CUSTOMER_NAME,
                CODE_SELLER        = encabezado.CODE_SELLER,
                CODE_ROUTE         = encabezado.CODE_ROUTE,
                CODE_WAREHOUSE     = argumento.Bodega,
                DOC_NUM            = encabezado.SALES_ORDER_ID,
                DOC_NUM_SEQUENCE   = encabezado.DOC_NUM,
                LAST_UPDATE        = DateTime.Now,
                SERIAL_NUMBER      = encabezado.DOC_SERIE,
                TOTAL_AMOUNT       = encabezado.TOTAL_AMOUNT,
                WAVE_PICKING_ID    = wavePickingId,
                IS_COMPLETED       = encabezado.IS_COMPLETED,
                EXTERNAL_SOURCE_ID = encabezado.EXTERNAL_SOURCE_ID,
                DOC_ENTRY          = encabezado.DOC_ENTRY,
                IS_CONSOLIDATED    = argumento.EsConsolidado ? 1 : 0,
                PRIORITY           = encabezado.Prioridad,
                CLIENT_OWNER       = encabezado.CLIENT_OWNER,
                MASTER_ID_SELLER   = encabezado.MASTER_ID_SELLER,
                SELLER_OWNER       = encabezado.SELLER_OWNER,
                OWNER            = encabezado.OWNER,
                SOURCE_TYPE      = Enums.GetStringValue(argumento.TipoDespacho),
                DEMAND_TYPE      = tipoDespacho,
                WAREHOUSE_FROM   = encabezado.WAREHOUSE_FROM,
                WAREHOUSE_TO     = encabezado.WAREHOUSE_TO,
                DELIVERY_DATE    = encabezado.DELIVERY_DATE.GetValueOrDefault().Date,
                ADDRESS_CUSTOMER = encabezado.ADDRESS_CUSTOMER,
                STATE_CODE       = encabezado.STATE_CODE,
                DISCOUNT         = encabezado.DISCOUNT,
                TYPE_DEMAND_CODE = encabezado.TYPE_DEMAND_CODE,
                TYPE_DEMAND_NAME = encabezado.TYPE_DEMAND_NAME
            };

            var op = CrearDemandaDespachoEncabezado(demandaHeader);

            if (op.Resultado == ResultadoOperacionTipo.Error)
            {
                throw new Exception("Error. No se pudo guardar la demanda de despacho de la orden de venta " +
                                    encabezado.SALES_ORDER_ID + ": " + op.Mensaje);
            }
            var pickingDocumentHeader = Convert.ToInt32(op.DbData);
            var demandaDetalle        = encabezado.Detalles.Select(x => new DemandaDespachoDetalle
            {
                ERP_OBJECT_TYPE          = x.ERP_OBJECT_TYPE,
                LINE_NUM                 = x.LINE_SEQ,
                MATERIAL_ID              = x.SKU,
                PRICE                    = x.PRICE,
                PICKING_DEMAND_HEADER_ID = Convert.ToInt32(op.DbData),
                QTY = Convert.ToInt32(x.QTY),
                MASTER_ID_MATERIAL = x.MASTER_ID_MATERIAL,
                MATERIAL_OWNER     = x.MATERIAL_OWNER,
                SOURCE_TYPE        = Enums.GetStringValue(argumento.TipoDespacho),
                TONE          = x.TONE,
                CALIBER       = x.CALIBER,
                DISCOUNT      = x.DISCOUNT,
                DISCOUNT_TYPE = x.DISCOUNT_TYPE,
                IS_BONUS      = x.IS_BONUS
            }).ToList();

            op = CrearDemandaDespachoDetalle(demandaDetalle, pickings);
            if (op.Resultado == ResultadoOperacionTipo.Error)
            {
                throw new Exception(
                          "Error. No se pudo guardar el detalle de la demanda de despacho de la orden de venta " +
                          encabezado.SALES_ORDER_ID + ": " + op.Mensaje);
            }
            return(pickingDocumentHeader);
        }
        private Operacion CrearPickingDeOrdenDeVenta(OrdenDeVentaEncabezado encabezadoOrden, Poliza poliza
                                                     , int wavePickingId, out IList <Picking> pickings, PickingArgumento argumento)
        {
            try
            {
                string transferRequestId = string.Empty;
                if (argumento.TipoDespacho == TipoFuenteDemandaDespacho.SolicitudTrasladoErp || argumento.TipoDespacho == TipoFuenteDemandaDespacho.SolicitudTrasladoWms)
                {
                    transferRequestId = encabezadoOrden.SALES_ORDER_ID.ToString();
                }

                pickings = (from detalle in encabezadoOrden.Detalles
                            group detalle by detalle.SKU
                            into g
                            select new Picking
                {
                    TASK_OWNER = argumento.Login,
                    TASK_ASSIGNEDTO = argumento.ManejaLineaDePicking ? argumento.LineaDePicking : "",            //Si es de linea se lo asigna si no se queda vacio para la asignación posterior
                    QUANTITY_ASSIGNED = g.Sum(x => x.QTY),
                    CODIGO_POLIZA_TARGET = poliza.CODIGO_POLIZA,
                    MATERIAL_ID = g.Key,
                    BARCODE_ID = g.Max(x => x.BARCODE_ID),
                    ALTERNATE_BARCODE = g.Max(x => x.ALTERNATE_BARCODE),
                    MATERIAL_NAME = g.Max(x => x.DESCRIPTION_SKU),
                    CLIENT_OWNER = g.Max(x => x.MATERIAL_OWNER),
                    CLIENT_NAME = g.Max(x => x.MATERIAL_OWNER),
                    CODE_WAREHOUSE_SOURCE = argumento.Bodega,
                    TONE = g.Max(x => x.TONE),
                    CALIBER = g.Max(x => x.CALIBER),
                    IN_PICKING_LINE = argumento.ManejaLineaDePicking ? (int)SiNo.Si : (int)SiNo.No
                }).ToList();

                Operacion op = new Operacion();
                if (!argumento.EsConsolidado)
                {
                    wavePickingId = 0;
                }

                foreach (var picking in pickings)
                {
                    DbParameter[] parameters =
                    {
                        new OAParameter
                        {
                            ParameterName = "@TASK_OWNER",
                            Value         = picking.TASK_OWNER
                        },
                        new OAParameter
                        {
                            ParameterName = "@TASK_ASSIGNEDTO",
                            Value         = picking.TASK_ASSIGNEDTO
                        },
                        new OAParameter
                        {
                            ParameterName = "@QUANTITY_ASSIGNED",
                            Value         = picking.QUANTITY_ASSIGNED
                        },
                        new OAParameter
                        {
                            ParameterName = "@CODIGO_POLIZA_TARGET",
                            Value         = encabezadoOrden.SALES_ORDER_ID + "-" + Enums.GetStringValue(argumento.TipoDespacho).Replace(" ", "") + '-' + encabezadoOrden.SOURCE_NAME
                        },
                        new OAParameter
                        {
                            ParameterName = "@MATERIAL_ID",
                            Value         = picking.MATERIAL_ID
                        },
                        new OAParameter
                        {
                            ParameterName = "@BARCODE_ID",
                            Value         = picking.BARCODE_ID
                        },
                        new OAParameter
                        {
                            ParameterName = "@ALTERNATE_BARCODE",
                            Value         = picking.ALTERNATE_BARCODE
                        },
                        new OAParameter
                        {
                            ParameterName = "@MATERIAL_NAME",
                            Value         = picking.MATERIAL_NAME
                        },
                        new OAParameter
                        {
                            ParameterName = "@CLIENT_OWNER",
                            Value         = picking.CLIENT_OWNER
                        },
                        new OAParameter
                        {
                            ParameterName = "@CLIENT_NAME",
                            Value         = picking.CLIENT_NAME
                        },
                        new OAParameter
                        {
                            ParameterName = "@IS_FROM_SONDA",
                            Value         = encabezadoOrden.IS_FROM_SONDA
                        },
                        new OAParameter
                        {
                            ParameterName = "@CODE_WAREHOUSE",
                            Value         = picking.CODE_WAREHOUSE_SOURCE
                        },
                        new OAParameter
                        {
                            ParameterName = "@IS_FROM_ERP",
                            Value         = encabezadoOrden.IS_FROM_ERP
                        }
                        ,
                        new OAParameter
                        {
                            ParameterName = "@WAVE_PICKING_ID",
                            Value         = wavePickingId
                        },
                        new OAParameter
                        {
                            ParameterName = "@DOC_ID_TARGET",
                            Value         = picking.CODIGO_POLIZA_TARGET
                        },
                        new OAParameter
                        {
                            ParameterName = "@LOCATION_SPOT_TARGET",
                            Value         = argumento.Ubicacion.LOCATION_SPOT
                        }
                        ,
                        new OAParameter
                        {
                            ParameterName = "@IS_CONSOLIDATED",
                            Value         = argumento.EsConsolidado
                        },
                        new OAParameter
                        {
                            ParameterName = "@SOURCE_TYPE",
                            Value         = Enums.GetStringValue(argumento.TipoDespacho)
                        }
                        ,
                        new OAParameter
                        {
                            ParameterName = "@TRANSFER_REQUEST_ID",
                            Value         = transferRequestId == string.Empty ? null : transferRequestId
                        }
                        ,
                        new OAParameter
                        {
                            ParameterName = "@TONE",
                            Value         = picking.TONE == string.Empty ? null : picking.TONE
                        }
                        ,
                        new OAParameter
                        {
                            ParameterName = "@CALIBER",
                            Value         = picking.CALIBER == string.Empty ? null : picking.CALIBER
                        },
                        new OAParameter
                        {
                            ParameterName = "@IN_PICKING_LINE",
                            Value         = picking.IN_PICKING_LINE
                        }
                    };

                    op = BaseDeDatosServicio.ExecuteQuery <Operacion>
                             (BaseDeDatosServicio.Esquema + ".OP_WMS_SP_INSERT_TASKS_GENERAL_PICKING_DEMAND", CommandType.StoredProcedure, false, parameters)[0];

                    if (op.Resultado == ResultadoOperacionTipo.Error)
                    {
                        throw new Exception(op.Mensaje);
                    }
                    else
                    {
                        wavePickingId = Convert.ToInt32(op.DbData.Split('|')[0]);
                        int QTY_MP = Convert.ToInt32(op.DbData.Split('|')?[1]);
                        picking.WAS_IMPLODED    = QTY_MP > 0 ? 1 : 0;
                        picking.QTY_IMPLODED    = QTY_MP;
                        picking.WAVE_PICKING_ID = wavePickingId;
                    }
                }
                return(op);
            }
            catch (Exception ex)
            {
                pickings = null;
                throw new Exception("Error. No se pudo Insertar Picking de la orden de venta " +
                                    encabezadoOrden.SALES_ORDER_ID + ": " + ex.Message);
            }
        }