Esempio n. 1
0
        public void PedidoCancelar(int idPedido)
        {
            ServicioGenerico servGenerico = new ServicioGenerico();
            PedidoRepository repository   = new PedidoRepository();
            Pedido           dato;

            dato        = repository.Obtener(idPedido);
            dato.Estado = this.ObtenerObjeto <Estado>((int)ESTADOS.CANCELADO_);

            repository.Actualizar(dato);

            string descuentaAlConfirmar = servGenerico.ParametroObtenerValor("DESCONTAR_STCOK_AL_CONFIRMAR");

            if (!string.IsNullOrEmpty(descuentaAlConfirmar) && descuentaAlConfirmar.Equals("SI"))
            {
                repository.PedidoLiberarStock(dato.Id);
            }
        }
Esempio n. 2
0
        public MensajeResponse PedidoAvanzar(Pedido datosGraba, bool esReenvioPedidoMinorista)
        {
            ServicioGenerico servGenerico = new ServicioGenerico();
            //Actualizamos el pedido
            Pedido pedido = this.PedidoGrabar(datosGraba);

            //Validamos que esté completo
            //string validaciones = pedido.Validar();
            //if (validaciones != string.Empty)
            //    return new MensajeResponse((int)ESTADOS_RESPONSE.ERROR_, validaciones);


            //3ro Actualizamos items modificados en caso que hubiera
            List <PedidoItem> itemsPedido = datosGraba.Items.FindAll(item => item.Modificado).ToList <PedidoItem>();

            if (itemsPedido != null && itemsPedido.Count > 0)
            {
                itemsPedido.ForEach(delegate(PedidoItem item)
                {
                    this.PedidoItemGrabarSinTotalPedido(item);
                });
                pedido = this.PedidoGrabarTotal(pedido.Id);
            }

            string descuentaAlConfirmar = servGenerico.ParametroObtenerValor("DESCONTAR_STCOK_AL_CONFIRMAR");

            PedidoRepository repository = new PedidoRepository();

            pedido = repository.Obtener(pedido.Id);

            //si está todo OK avanzamos el estado y actualizamos el pedido
            Estado proximoEstado = this.ObtenerObjeto <Estado>(pedido.Estado.PorximoEstado);

            switch (proximoEstado.Id)
            {
            case (int)ESTADOS.SOLICITADO_:

                string verificarStock = servGenerico.ParametroObtenerValor("VERIFICAR_STCOK");
                string esMayorista    = servGenerico.ParametroObtenerValor("VENTA_MAYORISTA");


                if ((!string.IsNullOrEmpty(verificarStock) && verificarStock.Equals("SI")) &&
                    (!string.IsNullOrEmpty(esMayorista) && esMayorista.Equals("SI")))
                {
                    pedido.Items = repository.PedidoVerificarStock(pedido.Id);

                    bool stockDisponibleOK = true;
                    pedido.Items.ForEach(delegate(PedidoItem pi)
                    {
                        //hago esta truchada para que si una vez da false no se pise con el true, y no puedo cortar la ejecucion del foreach
                        if (stockDisponibleOK)
                        {
                            stockDisponibleOK = pi.ItemProductos.ToList <PedidoItemProducto>()
                                                .FindAll(x => x.Cantidad > 0 && x.Cantidad != x.StockDisponible).Count == 0;
                        }
                    });

                    if (!stockDisponibleOK)
                    {
                        string verificarStockMsjError = servGenerico.ParametroObtenerValor("VERIFICAR_STCOK_ MSJ_ERROR");
                        return(new MensajeResponse((int)ESTADOS_RESPONSE.ERROR_, (string.IsNullOrEmpty(verificarStockMsjError) ? "Verificar pedido por falta de stock disponible." : verificarStockMsjError)));
                    }
                }

                //se reserva el stock
                if (!string.IsNullOrEmpty(descuentaAlConfirmar) && descuentaAlConfirmar.Equals("SI"))
                {
                    repository.PedidoReservarStock(pedido.Id);
                    CacheManager.RemoveToCache(gobalKeyCache);
                }

                //asignamos Fecha y Número
                Pedido ultimo = repository.ObtenerUltimoPedido();
                pedido.Numero = (ultimo != null) ? (ultimo.Numero + 1) : 1;
                pedido.Fecha  = DateTime.Now;
                pedido.Estado = proximoEstado;

                if (esReenvioPedidoMinorista)
                {
                    pedido.IdPedidoMinorista     = datosGraba.IdPedidoMinorista;
                    pedido.NumeroPedidoMinorista = datosGraba.NumeroPedidoMinorista;
                }

                repository.Actualizar(pedido);

                break;

            case (int)ESTADOS.FINALIZADO_:

                if (!string.IsNullOrEmpty(descuentaAlConfirmar) && descuentaAlConfirmar.Equals("SI"))
                {
                    repository.PedidoDescontarStock(pedido.Id);
                    CacheManager.RemoveToCache(gobalKeyCache);
                }
                pedido.Estado = proximoEstado;
                repository.Actualizar(pedido);

                break;
            }


            return(new MensajeResponse((int)ESTADOS_RESPONSE.OK_, ""));
        }