public Operacion CrearDemandaDespachoEncabezado(DemandaDespachoHeader encabezado)
        {
            DbParameter[] parameters =
            {
                new OAParameter
                {
                    ParameterName = "@DOC_NUM",
                    Value         = encabezado.DOC_NUM
                }
                ,
                new OAParameter
                {
                    ParameterName = "@CLIENT_CODE",
                    Value         = encabezado.CLIENT_CODE
                }
                ,
                new OAParameter
                {
                    ParameterName = "@CODE_ROUTE",
                    Value         = encabezado.CODE_ROUTE
                }
                ,
                new OAParameter
                {
                    ParameterName = "@CODE_SELLER",
                    Value         = encabezado.CODE_SELLER
                }
                ,
                new OAParameter
                {
                    ParameterName = "@TOTAL_AMOUNT",
                    Value         = encabezado.TOTAL_AMOUNT
                }
                ,
                new OAParameter
                {
                    ParameterName = "@SERIAL_NUMBER",
                    Value         = encabezado.SERIAL_NUMBER
                }
                , new OAParameter
                {
                    ParameterName = "@DOC_NUM_SEQUENCE",
                    Value         = encabezado.DOC_NUM_SEQUENCE
                }
                , new OAParameter
                {
                    ParameterName = "@EXTERNAL_SOURCE_ID",
                    Value         = encabezado.EXTERNAL_SOURCE_ID
                }
                , new OAParameter
                {
                    ParameterName = "@IS_FROM_ERP",
                    Value         = encabezado.IS_FROM_ERP
                }
                , new OAParameter
                {
                    ParameterName = "@IS_FROM_SONDA",
                    Value         = encabezado.IS_FROM_SONDA
                }
                , new OAParameter
                {
                    ParameterName = "@LAST_UPDATE_BY",
                    Value         = encabezado.LAST_UPDATE_BY
                }
                , new OAParameter
                {
                    ParameterName = "@WAVE_PICKING_ID",
                    Value         = encabezado.WAVE_PICKING_ID
                }
                , new OAParameter
                {
                    ParameterName = "@CODE_WAREHOUSE",
                    Value         = encabezado.CODE_WAREHOUSE
                }
                , new OAParameter
                {
                    ParameterName = "@IS_COMPLETED",
                    Value         = encabezado.IS_COMPLETED
                }
                , new OAParameter
                {
                    ParameterName = "@CUSTOMER_NAME",
                    Value         = encabezado.CUSTOMER_NAME
                }
                , new OAParameter
                {
                    ParameterName = "@DOC_ENTRY",
                    Value         = encabezado.DOC_ENTRY
                }
                , new OAParameter
                {
                    ParameterName = "@IS_CONSOLIDATED",
                    Value         = encabezado.IS_CONSOLIDATED
                }
                , new OAParameter
                {
                    ParameterName = "@PRIORITY",
                    Value         = encabezado.PRIORITY
                }
                , new OAParameter
                {
                    ParameterName = "@OWNER",
                    Value         = encabezado.OWNER
                }
                , new OAParameter
                {
                    ParameterName = "@CLIENT_OWNER",
                    Value         = encabezado.CLIENT_OWNER
                }
                , new OAParameter
                {
                    ParameterName = "@SELLER_OWNER",
                    Value         = encabezado.SELLER_OWNER
                }
                , new OAParameter
                {
                    ParameterName = "@MASTER_ID_SELLER",
                    Value         = encabezado.MASTER_ID_SELLER
                }
                , new OAParameter
                {
                    ParameterName = "@SOURCE_TYPE",
                    Value         = encabezado.SOURCE_TYPE
                }
                , new OAParameter
                {
                    ParameterName = "@DEMAND_TYPE",
                    Value         = encabezado.DEMAND_TYPE
                }
                , new OAParameter
                {
                    ParameterName = "@WAREHOUSE_FROM",
                    Value         = encabezado.WAREHOUSE_FROM
                }
                , new OAParameter
                {
                    ParameterName = "@WAREHOUSE_TO",
                    Value         = encabezado.WAREHOUSE_TO
                }
                , new OAParameter
                {
                    ParameterName = "@DELIVERY_DATE",
                    Value         = encabezado.DELIVERY_DATE
                }, new OAParameter
                {
                    ParameterName = "@ADDRESS_CUSTOMER",
                    Value         = encabezado.ADDRESS_CUSTOMER
                }
                , new OAParameter
                {
                    ParameterName = "@STATE_CODE",
                    Value         = encabezado.STATE_CODE
                }
                , new OAParameter
                {
                    ParameterName = "@DISCOUNT",
                    Value         = encabezado.DISCOUNT
                }
                , new OAParameter
                {
                    ParameterName = "@TYPE_DEMAND_CODE",
                    Value         = encabezado.TYPE_DEMAND_CODE
                }
                , new OAParameter
                {
                    ParameterName = "@TYPE_DEMAND_NAME",
                    Value         = encabezado.TYPE_DEMAND_NAME
                }
            };
            var op = BaseDeDatosServicio.ExecuteQuery <Operacion>(BaseDeDatosServicio.Esquema + ".OP_WMS_SP_INSERT_NEXT_DEMAND_PICKING_HEADER", CommandType.StoredProcedure, false, parameters)[0];

            return(op);
        }
        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);
        }