public IActionResult PostEnvioPaquetes(RequestEnvioPaquetesDto request) { try { return(new JsonResult(_service.CreateEnvioPaquetes(request)) { StatusCode = 200 }); } catch (Exception e) { return(BadRequest(e.Message)); } }
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 }); }