コード例 #1
0
 public IActionResult PostEnvioPaquetes(RequestEnvioPaquetesDto request)
 {
     try
     {
         return(new JsonResult(_service.CreateEnvioPaquetes(request))
         {
             StatusCode = 200
         });
     }
     catch (Exception e)
     {
         return(BadRequest(e.Message));
     }
 }
コード例 #2
0
        public ResponseRequestDto CreateEnvioPaquetes(RequestEnvioPaquetesDto envio)
        {
            const int pesoMax = 100;
            const int volMax  = 1200000;

            List <PaqueteDto> paquetes = envio.Paquetes;

            int costo = _query.ValorPaquete(paquetes[0].IdTipoPaquete).Valor;

            // No puede ingresar distintos tipos de paquetes
            if (!ValidarTipoPaquetes(paquetes))
            {
                return new ResponseRequestDto {
                           Codigo = 400, Mensaje = "No se puede enviar distintos tipos de paquetes en un envío"
                }
            }
            ;

            switch (envio.Paquetes[0].IdTipoPaquete)
            {
            // Caja
            case 1:
                // Valido que tenga peso y volumen
                if (!TienePesoYVolumen(paquetes))
                {
                    return new ResponseRequestDto {
                               Codigo = 400, Mensaje = "No ingresó peso o medida en algún paquete"
                    }
                }
                ;

                // Validar peso máximo y volumen máximo
                if (PesoTotal(paquetes) > pesoMax)
                {
                    return new ResponseRequestDto {
                               Codigo = 400, Mensaje = "Supera el peso máximo"
                    }
                }
                ;

                if (VolumenTotal(paquetes) > volMax)
                {
                    return new ResponseRequestDto {
                               Codigo = 400, Mensaje = "Supera el volumen máximo"
                    }
                }
                ;

                // Calcular costo de envío de cajas
                costo += CalcularCostoPaquetes(paquetes);
                break;

            // Bolsin
            case 2:
                // Validar que no ingresó peso o medidas
                if (TienePesoOVolumen(paquetes))
                {
                    return new ResponseRequestDto {
                               Codigo = 400, Mensaje = "No debe ingresar peso o medidas"
                    }
                }
                ;
                // Calculo el costo
                costo = costo * paquetes.Count;
                break;

            // Carta documento
            case 3:
                // Validar que es uno solo
                if (paquetes.Count > 1)
                {
                    return new ResponseRequestDto {
                               Codigo = 400, Mensaje = "Solo puede enviar una carta documento"
                    }
                }
                ;
                // Validar que no ingresó peso o medidas
                if (TienePesoOVolumen(paquetes))
                {
                    return new ResponseRequestDto {
                               Codigo = 400, Mensaje = "No debe ingresar peso o medidas"
                    }
                }
                ;
                break;

            // Telegrama
            case 4:
                // Validar que es uno solo
                if (paquetes.Count > 1)
                {
                    return new ResponseRequestDto {
                               Codigo = 400, Mensaje = "Solo puede enviar un telegrama"
                    }
                }
                ;
                // Validar que no ingresó peso o medidas
                if (TienePesoOVolumen(paquetes))
                {
                    return new ResponseRequestDto {
                               Codigo = 400, Mensaje = "No debe ingresar peso o medidas"
                    }
                }
                ;
                break;

            // Carta simple
            case 5:
                // Validar que no ingresó peso o medidas
                if (TienePesoOVolumen(paquetes))
                {
                    return new ResponseRequestDto {
                               Codigo = 400, Mensaje = "No debe ingresar peso o medidas"
                    }
                }
                ;
                // Calculo el costo
                costo = costo * paquetes.Count;
                break;

            default:
                return(new ResponseRequestDto {
                    Codigo = 400, Mensaje = "Tipo de paquete inválido"
                });
            }

            var entityEnvio = new Envio {
                IdUserOrigen       = envio.idUsuario,
                IdDireccionDestino = ObtenerIdDirDestino(envio.DireccionDestino),
                Costo = costo
            };

            this._repository.Add <Envio>(entityEnvio);
            this._repository.SaveChanges();

            foreach (PaqueteDto paquete in paquetes)
            {
                var entityPaquete = new Paquete
                {
                    Peso          = paquete.Peso,
                    Largo         = paquete.Largo,
                    Ancho         = paquete.Ancho,
                    Alto          = paquete.Alto,
                    Dimension     = paquete.Largo * paquete.Ancho * paquete.Alto,
                    IdTipoPaquete = paquete.IdTipoPaquete,
                    IdEnvio       = entityEnvio.IdEnvio
                };
                this._repository.Add <Paquete>(entityPaquete);
            }

            this._repository.SaveChanges();
            return(new ResponseRequestDto {
                Codigo = 201, Mensaje = "Envío creado correctamente", Id = entityEnvio.IdEnvio
            });
        }