예제 #1
0
        public IActionResult Generar([FromBody] GenerarLoteRequestDTO request)
        {
            Guid guid = Guid.NewGuid();

            _log.RegistrarEvento($"{guid.ToString()}{Environment.NewLine}{Newtonsoft.Json.JsonConvert.SerializeObject(request)}");

            GenerarLoteResponseDTO response = new GenerarLoteResponseDTO();

            try
            {
                response.Result.Data = _loteService.GenerarLote(request);

                response.Result.Success = true;
            }
            catch (ResultException ex)
            {
                response.Result = new Result()
                {
                    Success = true, ErrCode = ex.Result.ErrCode, Message = ex.Result.Message
                };
            }
            catch (Exception ex)
            {
                response.Result = new Result()
                {
                    Success = false, Message = "Ocurrio un problema en el servicio, intentelo nuevamente."
                };
                _log.RegistrarEvento(ex, guid.ToString());
            }

            _log.RegistrarEvento($"{guid.ToString()}{Environment.NewLine}{Newtonsoft.Json.JsonConvert.SerializeObject(response)}");

            return(Ok(response));
        }
예제 #2
0
        public int GenerarLote(GenerarLoteRequestDTO request)
        {
            Lote lote = new Lote();

            lote.EmpresaId           = request.EmpresaId;
            lote.Numero              = _ICorrelativoRepository.Obtener(request.EmpresaId, Documentos.Lote);
            lote.EstadoId            = LoteEstados.Ingresado;
            lote.AlmacenId           = request.AlmacenId;
            lote.FechaRegistro       = DateTime.Now;
            lote.UsuarioRegistro     = request.Usuario;
            lote.ProductoId          = request.ProductoId;
            lote.SubProductoId       = request.SubProductoId;
            lote.TipoCertificacionId = request.TipoCertificacionId;

            int loteId = 0;

            decimal totalKilosNetosPesado      = 0;
            decimal totalKilosNetosDescontar   = 0;
            decimal totalKilosNetosPagar       = 0;
            decimal totalKilosBrutosPesado     = 0;
            decimal totalCantidad              = 0;
            string  unidadMedidaId             = String.Empty;
            decimal totalRendimientoPorcentaje = 0;
            decimal totalAnalisisSensorial     = 0;
            decimal totalHumedadPorcentaje     = 0;
            string  tipoProduccionId           = String.Empty;

            List <NotaIngresoAlmacen> notasIngreso = _INotaIngresoAlmacenRepository.ConsultarNotaIngresoPorIds(request.NotasIngresoAlmacenId).ToList();

            if (notasIngreso != null)
            {
                List <LoteDetalle> lotesDetalle = new List <LoteDetalle>();

                notasIngreso.ForEach(notaingreso =>
                {
                    LoteDetalle item           = new LoteDetalle();
                    item.LoteId                = loteId;
                    item.NotaIngresoAlmacenId  = notaingreso.NotaIngresoAlmacenId;
                    item.Numero                = notaingreso.Numero;
                    item.TipoProvedorId        = notaingreso.TipoProvedorId;
                    item.SocioId               = notaingreso.SocioId;
                    item.TerceroId             = notaingreso.TerceroId;
                    item.IntermediarioId       = notaingreso.IntermediarioId;
                    item.ProductoId            = notaingreso.ProductoId;
                    item.SubProductoId         = notaingreso.SubProductoId;
                    item.UnidadMedidaIdPesado  = notaingreso.UnidadMedidaIdPesado;
                    item.CantidadPesado        = notaingreso.CantidadPesado;
                    item.KilosNetosPesado      = notaingreso.KilosNetosPesado;
                    item.KilosBrutosPesado     = notaingreso.KilosBrutosPesado;
                    item.RendimientoPorcentaje = notaingreso.RendimientoPorcentaje;
                    item.HumedadPorcentaje     = notaingreso.HumedadPorcentajeAnalisisFisico;
                    if (notaingreso.TotalAnalisisSensorial != null)
                    {
                        item.TotalAnalisisSensorial = notaingreso.TotalAnalisisSensorial.Value;
                    }



                    item.NotaIngresoAlmacenId  = notaingreso.NotaIngresoAlmacenId;
                    totalKilosNetosPesado      = totalKilosNetosPesado + item.KilosNetosPesado;
                    totalKilosBrutosPesado     = totalKilosBrutosPesado + item.KilosBrutosPesado;
                    totalRendimientoPorcentaje = totalRendimientoPorcentaje + item.RendimientoPorcentaje.Value;
                    totalAnalisisSensorial     = totalAnalisisSensorial + item.TotalAnalisisSensorial;
                    totalKilosNetosPagar       = totalKilosNetosPagar + (notaingreso.KilosNetosPagar.HasValue ? notaingreso.KilosNetosPagar.Value : 0);
                    totalKilosNetosDescontar   = totalKilosNetosDescontar + (notaingreso.KilosNetosDescontar.HasValue ? notaingreso.KilosNetosDescontar.Value : 0);
                    totalHumedadPorcentaje     = totalHumedadPorcentaje + item.HumedadPorcentaje;
                    totalCantidad    = totalCantidad + item.CantidadPesado;
                    unidadMedidaId   = item.UnidadMedidaIdPesado;
                    tipoProduccionId = notaingreso.TipoProduccionId;
                    lotesDetalle.Add(item);
                });


                lote.TotalKilosNetosPesado    = totalKilosNetosPesado;
                lote.TotalKilosBrutosPesado   = totalKilosBrutosPesado;
                lote.TotalKilosNetosPagar     = totalKilosNetosPagar;
                lote.TotalKilosNetosDescontar = totalKilosNetosDescontar;
                //lote.PromedioRendimientoPorcentaje = totalRendimientoPorcentaje / lotesDetalle.Count;
                //lote.PromedioHumedadPorcentaje = totalHumedadPorcentaje / lotesDetalle.Count;
                lote.UnidadMedidaId   = unidadMedidaId;
                lote.TipoProduccionId = tipoProduccionId;
                //lote.PromedioTotalAnalisisSensorial = totalAnalisisSensorial / lotesDetalle.Count;

                lote.Cantidad = totalCantidad;

                loteId = _ILoteRepository.Insertar(lote);

                lotesDetalle.ForEach(loteDetalle =>
                {
                    loteDetalle.LoteId = loteId;
                });

                int affected = _ILoteRepository.InsertarLoteDetalle(lotesDetalle);

                notasIngreso.ForEach(notaingreso =>
                {
                    _INotaIngresoAlmacenRepository.ActualizarEstado(notaingreso.NotaIngresoAlmacenId, DateTime.Now, request.Usuario, NotaIngresoAlmacenEstados.Lotizado);
                });
            }

            return(loteId);
        }