Exemplo n.º 1
0
        public ReporteDespachoVo(ConsumoDetalle anterior, ConsumoDetalle consumo)
        {
            var dao = new DAOFactory();

            Id    = consumo.Id;
            Coche = consumo.ConsumoCabecera.Vehiculo;
            Fecha = consumo.ConsumoCabecera.Fecha;
            var entidad = dao.EntidadDAO.FindByDispositivo(new[] { Coche.Empresa != null ? Coche.Empresa.Id : -1 },
                                                           new[] { Coche.Linea != null ? Coche.Linea.Id : -1 },
                                                           new[] { Coche.Dispositivo != null ? Coche.Dispositivo.Id : -1 });
            var usaTelemetria = entidad != null && entidad.Id != 0;

            Vehiculo = Coche.Interno;
            Periodo  = anterior.ConsumoCabecera.Fecha.ToDisplayDateTime().ToString("dd/MM/yyyy HH:mm") + " a " + consumo.ConsumoCabecera.Fecha.ToDisplayDateTime().ToString("dd/MM/yyyy HH:mm");
            Despacho = consumo.Cantidad;
            var dm = dao.DatamartDAO.GetSummarizedDatamart(anterior.ConsumoCabecera.Fecha, consumo.ConsumoCabecera.Fecha, Coche.Id);

            if (usaTelemetria)
            {
                Consumo = dm.Consumo;
            }
            else
            {
                var km          = dm.Kilometros;
                var rendimiento = Coche.CocheOperacion != null && Coche.CocheOperacion.Rendimiento > 0.0
                                      ? Coche.CocheOperacion.Rendimiento
                                      : Coche.Modelo != null
                                            ? Coche.Modelo.Rendimiento
                                            : 0.0;
                Consumo = km > 0 && rendimiento > 0 ? (km / 100.0) * rendimiento: 0.0;
            }
            Diferencia = Consumo - Despacho;
            DifPorc    = Despacho > 0.00 ? Diferencia / Despacho * 100 : 0.00;
        }
Exemplo n.º 2
0
 public ConsumoVo(ConsumoDetalle consumo)
 {
     Id            = consumo.ConsumoCabecera.Id;
     Fecha         = consumo.ConsumoCabecera.Fecha.ToDisplayDateTime();
     CentroDeCosto = consumo.ConsumoCabecera.Vehiculo != null &&
                     consumo.ConsumoCabecera.Vehiculo.CentroDeCostos != null
                         ? consumo.ConsumoCabecera.Vehiculo.CentroDeCostos.Descripcion
                         : string.Empty;
     Tipo = consumo.ConsumoCabecera.Vehiculo != null
                ? consumo.ConsumoCabecera.Vehiculo.TipoCoche.Descripcion
                : consumo.ConsumoCabecera.DepositoDestino != null
                      ? "Depósito"
                      : string.Empty;
     Destino = consumo.ConsumoCabecera.Vehiculo != null
                   ? consumo.ConsumoCabecera.Vehiculo.Interno
                   : consumo.ConsumoCabecera.DepositoDestino != null
                         ? consumo.ConsumoCabecera.DepositoDestino.Descripcion
                         : string.Empty;
     NumeroFactura = consumo.ConsumoCabecera.NumeroFactura;
     Origen        = consumo.ConsumoCabecera.Proveedor != null
                  ? consumo.ConsumoCabecera.Proveedor.Descripcion
                  : consumo.ConsumoCabecera.Deposito != null
                        ? consumo.ConsumoCabecera.Deposito.Descripcion
                        : string.Empty;
     TipoInsumo = consumo.Insumo.TipoInsumo != null
                      ? consumo.Insumo.TipoInsumo.Descripcion
                      : string.Empty;
     Insumo       = consumo.Insumo.Descripcion;
     Cantidad     = consumo.Cantidad;
     ImporteTotal = consumo.ImporteTotal;
 }
Exemplo n.º 3
0
        private double GetTotalDespacho(ConsumoDetalle consumoDetalle)
        {
            var total            = consumoDetalle.Cantidad;
            var consumoSiguiente = DaoFactory.ConsumoDetalleDAO.GetPrimerDespacho(consumoDetalle.ConsumoCabecera.Vehiculo.Id, consumoDetalle.ConsumoCabecera.Fecha, consumoDetalle.ConsumoCabecera.Fecha.AddMinutes(5));

            while (consumoSiguiente != null)
            {
                total           += consumoSiguiente.Cantidad;
                consumoSiguiente = DaoFactory.ConsumoDetalleDAO.GetUltimoDespacho(consumoSiguiente.ConsumoCabecera.Vehiculo.Id, consumoSiguiente.ConsumoCabecera.Fecha, consumoSiguiente.ConsumoCabecera.Fecha.AddMinutes(5));
            }

            return(total);
        }
Exemplo n.º 4
0
        private DateTime GetFechaDespacho(ConsumoDetalle consumoDetalle)
        {
            var fecha            = consumoDetalle.ConsumoCabecera.Fecha;
            var consumoSiguiente = DaoFactory.ConsumoDetalleDAO.GetPrimerDespacho(consumoDetalle.ConsumoCabecera.Vehiculo.Id, consumoDetalle.ConsumoCabecera.Fecha, consumoDetalle.ConsumoCabecera.Fecha.AddMinutes(5));

            while (consumoSiguiente != null)
            {
                fecha            = consumoSiguiente.ConsumoCabecera.Fecha;
                consumoSiguiente = DaoFactory.ConsumoDetalleDAO.GetPrimerDespacho(consumoSiguiente.ConsumoCabecera.Vehiculo.Id, consumoSiguiente.ConsumoCabecera.Fecha, consumoSiguiente.ConsumoCabecera.Fecha.AddMinutes(5));
            }

            return(fecha);
        }
Exemplo n.º 5
0
        protected void BtNewParamClick(object sender, EventArgs e)
        {
            var parameter = new ConsumoDetalle {
                Cantidad = 0.0, ImporteUnitario = 0.0, ImporteTotal = 0.0
            };
            var par = NuevosConsumos;

            par.Add(parameter);
            NuevosConsumos = par;
            var list = GetConsumosFromView().Select(c => c.ConsumoDetalle).ToList();

            list.Add(parameter);
            ReBindParametros(list);
        }
Exemplo n.º 6
0
        public StockVo(ConsumoDetalle consumoDetalle, Stock stock)
        {
            Id           = stock.Id;
            Deposito     = stock.Deposito.ToString();
            Insumo       = stock.Insumo.ToString();
            Fecha        = consumoDetalle.ConsumoCabecera.Fecha.ToDisplayDateTime().ToString("dd/MM/yyyy HH:mm");
            StockInicial = "0.00";
            Cant         = consumoDetalle.Cantidad;
            Cantidad     = consumoDetalle.Cantidad.ToString();
            StockFinal   = "0.00";

            if (consumoDetalle.ConsumoCabecera.Deposito != null &&
                consumoDetalle.ConsumoCabecera.Deposito.Id == stock.Deposito.Id)
            {
                if (consumoDetalle.ConsumoCabecera.Vehiculo != null)
                {
                    Concepto = consumoDetalle.ConsumoCabecera.Vehiculo.Interno;
                }
                if (consumoDetalle.ConsumoCabecera.DepositoDestino != null)
                {
                    Concepto = consumoDetalle.ConsumoCabecera.DepositoDestino.Descripcion;
                }
            }
            else
            {
                if (consumoDetalle.ConsumoCabecera.DepositoDestino != null &&
                    consumoDetalle.ConsumoCabecera.DepositoDestino.Id == stock.Deposito.Id)
                {
                    if (consumoDetalle.ConsumoCabecera.Proveedor != null)
                    {
                        Concepto = consumoDetalle.ConsumoCabecera.Proveedor.Descripcion;
                    }
                    if (consumoDetalle.ConsumoCabecera.Deposito != null)
                    {
                        Concepto = consumoDetalle.ConsumoCabecera.Deposito.Descripcion;
                    }
                }
            }
        }
Exemplo n.º 7
0
        public ConsumoCombustibleVo(ConsumoDetalle consumo)
        {
            Id              = consumo.Id;
            IdCabecera      = consumo.ConsumoCabecera.Id;
            Fecha           = consumo.ConsumoCabecera.Fecha.ToDisplayDateTime();
            Cantidad        = consumo.Cantidad;
            NumeroFactura   = consumo.ConsumoCabecera.NumeroFactura;
            ImporteUnitario = consumo.ImporteUnitario;
            ImporteTotal    = consumo.ImporteTotal;
            Vehiculo        = consumo.ConsumoCabecera.Vehiculo != null?consumo.ConsumoCabecera.Vehiculo.ToString() : string.Empty;

            IdVehiculo = consumo.ConsumoCabecera.Vehiculo != null ? consumo.ConsumoCabecera.Vehiculo.Id : 0;
            Insumo     = consumo.Insumo != null?consumo.Insumo.ToString() : string.Empty;

            Proveedor = consumo.ConsumoCabecera.Proveedor != null?consumo.ConsumoCabecera.Proveedor.ToString() : string.Empty;

            Modelo    = (consumo.ConsumoCabecera.Vehiculo != null && consumo.ConsumoCabecera.Vehiculo.Modelo != null) ? consumo.ConsumoCabecera.Vehiculo.Modelo.Descripcion : string.Empty;
            Capacidad = (consumo.ConsumoCabecera.Vehiculo != null && consumo.ConsumoCabecera.Vehiculo.Modelo != null) ? consumo.ConsumoCabecera.Vehiculo.Modelo.Capacidad : 0.0;

            if (consumo.ConsumoCabecera.Vehiculo != null)
            {
                if (consumo.ConsumoCabecera.Vehiculo.CocheOperacion != null && consumo.ConsumoCabecera.Vehiculo.CocheOperacion.Rendimiento > 0.0)
                {
                    Rendimiento = consumo.ConsumoCabecera.Vehiculo.CocheOperacion.Rendimiento;
                }
                else
                {
                    Rendimiento = consumo.ConsumoCabecera.Vehiculo.Modelo != null ? consumo.ConsumoCabecera.Vehiculo.Modelo.Rendimiento : 0.0;
                }
            }
            else
            {
                Rendimiento = 0.0;
            }

            ConsumoCalculadoDeclarado = (consumo.ConsumoCabecera.Vehiculo != null && KmDeclarados > 0 && Rendimiento > 0) ? (KmDeclarados / 100.0) * Rendimiento : 0.0;
        }
Exemplo n.º 8
0
        public override object Parse(int empresa, int linea, IData data)
        {
            var item = GetConsumo(empresa, linea, data);

            if (data.Operation == (int)Operation.Delete)
            {
                return(item);
            }

            var codigoLinea = data[Properties.Consumo.Linea];

            if (codigoLinea != null)
            {
                var l = GetLinea(empresa, data[Properties.Consumo.Linea]);
                if (l != null)
                {
                    linea = l.Id;
                }
            }

            Coche vehiculo        = null;
            var   internoVehiculo = data[Properties.Consumo.Vehiculo];

            if (internoVehiculo != null || item.Vehiculo != null)
            {
                vehiculo = DaoFactory.CocheDAO.FindByInterno(new[] { empresa }, new[] { linea }, internoVehiculo);
                if (vehiculo == null && item.Vehiculo == null)
                {
                    vehiculo = DaoFactory.CocheDAO.FindByInterno(new[] { empresa }, new[] { linea }, "(Generico)");
                    if (vehiculo == null)
                    {
                        throw new EntityParserException("No se encontró el vehículo con interno " + internoVehiculo);
                    }
                }
            }
            else
            {
                ThrowProperty("Vehiculo");
            }

            Proveedor proveedor       = null;
            var       codigoProveedor = data[Properties.Consumo.Proveedor];

            if (codigoProveedor != null || item.Proveedor != null)
            {
                if (codigoProveedor == string.Empty)
                {
                    proveedor = DaoFactory.ProveedorDAO.FindByCode(new[] { empresa }, new[] { linea }, "ST");
                    if (proveedor == null)
                    {
                        var tipoProveedor = DaoFactory.TipoProveedorDAO.FindByCode(new[] { empresa }, new[] { linea }, "G");
                        if (tipoProveedor == null)
                        {
                            tipoProveedor = new TipoProveedor
                            {
                                Baja        = false,
                                Codigo      = "G",
                                Descripcion = "Generico",
                                Empresa     = vehiculo.Empresa
                            };

                            DaoFactory.TipoProveedorDAO.SaveOrUpdate(tipoProveedor);
                        }

                        proveedor = new Proveedor
                        {
                            Codigo        = "ST",
                            Descripcion   = "Stock",
                            Empresa       = vehiculo.Empresa,
                            TipoProveedor = tipoProveedor
                        };

                        DaoFactory.ProveedorDAO.SaveOrUpdate(proveedor);
                    }
                }
                else
                {
                    proveedor = DaoFactory.ProveedorDAO.FindByCode(new[] { empresa }, new[] { linea }, codigoProveedor);
                }

                if (proveedor == null && item.Proveedor == null)
                {
                    throw new EntityParserException("No se encontro el Proveedor con código " + codigoProveedor);
                }
            }
            else
            {
                ThrowProperty("Proveedor");
            }

            Insumo insumo       = null;
            var    codigoInsumo = data[Properties.Consumo.Insumo];

            if (codigoInsumo != null)
            {
                if (codigoInsumo == string.Empty)
                {
                    insumo = DaoFactory.InsumoDAO.FindByCode(new[] { empresa }, new[] { linea }, "FF");
                    if (insumo == null)
                    {
                        var tipoInsumo   = DaoFactory.TipoInsumoDAO.FindByCode(new[] { empresa }, new[] { linea }, "G");
                        var unidadMedida = DaoFactory.UnidadMedidaDAO.FindByCode("U");

                        if (tipoInsumo == null)
                        {
                            tipoInsumo = new TipoInsumo
                            {
                                Codigo        = "G",
                                DeCombustible = false,
                                Descripcion   = "Generico",
                                Empresa       = vehiculo.Empresa
                            };

                            DaoFactory.TipoInsumoDAO.SaveOrUpdate(tipoInsumo);
                        }
                        if (unidadMedida == null)
                        {
                            unidadMedida = new UnidadMedida
                            {
                                Codigo      = "U",
                                Descripcion = "Unidad",
                                Simbolo     = "Un"
                            };

                            DaoFactory.UnidadMedidaDAO.SaveOrUpdate(unidadMedida);
                        }

                        insumo = new Insumo
                        {
                            Codigo       = "FF",
                            Descripcion  = "Fondo Fijo",
                            Empresa      = vehiculo.Empresa,
                            Linea        = vehiculo.Linea,
                            TipoInsumo   = tipoInsumo,
                            UnidadMedida = unidadMedida
                        };

                        DaoFactory.InsumoDAO.SaveOrUpdate(insumo);
                    }
                }
                else
                {
                    insumo = DaoFactory.InsumoDAO.FindByCode(new[] { empresa }, new[] { linea }, codigoInsumo);
                }
            }

            int igmt;

            int.TryParse(data[Properties.Consumo.Gmt], out igmt);

            var fecha = data[Properties.Consumo.Fecha];

            if (fecha != null || item.Fecha != default(DateTime))
            {
                if (!fecha.AsDateTime().HasValue&& item.Fecha == default(DateTime))
                {
                    throw new EntityParserException("La Fecha no es válida: " + fecha);
                }
            }
            else
            {
                ThrowProperty("Fecha");
            }

            Empleado empleado       = null;
            var      legajoEmpleado = data[Properties.Consumo.Empleado];

            if (legajoEmpleado != null)
            {
                empleado = DaoFactory.EmpleadoDAO.FindByLegajo(empresa, linea, legajoEmpleado);
            }

            item.NumeroFactura = data[Properties.Consumo.NroFactura].Truncate(64);
            if (vehiculo != null)
            {
                item.Vehiculo = vehiculo;
            }
            if (legajoEmpleado != null)
            {
                item.Empleado = empleado;
            }
            if (fecha.AsDateTime().HasValue)
            {
                item.Fecha = fecha.AsDateTime().Value.AddHours(-igmt);
            }
            if (data[Properties.Consumo.Km].AsDouble().HasValue)
            {
                item.KmDeclarados = data[Properties.Consumo.Km].AsDouble() ?? 0;
            }
            if (proveedor != null)
            {
                item.Proveedor = proveedor;
            }

            item.Deposito        = null;
            item.DepositoDestino = null;
            item.Estado          = ConsumoCabecera.Estados.Pagado;
            item.TipoMovimiento  = ConsumoCabecera.TiposMovimiento.ProveedorAVehiculo;

            if (insumo != null)
            {
                var detalle = new ConsumoDetalle
                {
                    ConsumoCabecera = item,
                    Insumo          = insumo,
                    //Cambiar mapeo Tel3
                    ImporteTotal = data[Properties.Consumo.ImporteUnitario].AsDouble() ?? 0,
                    Cantidad     = data[Properties.Consumo.Cantidad].AsDouble() ?? 1
                };
                detalle.ImporteUnitario = detalle.ImporteTotal / detalle.Cantidad;

                item.Detalles.Add(detalle);

                insumo.ValorReferencia = detalle.ImporteUnitario;
                DaoFactory.InsumoDAO.SaveOrUpdate(insumo);

                if (item.Vehiculo != null)
                {
                    DaoFactory.MovOdometroVehiculoDAO.ResetByVehicleAndInsumo(item.Vehiculo, insumo);
                }
            }

            item.ImporteTotal = item.Detalles.Cast <ConsumoDetalle>().Select(d => d.ImporteTotal).Sum();

            return(item);
        }
Exemplo n.º 9
0
 private static bool FaltanDatosDetalle(ConsumoDetalle detalle)
 {
     return(detalle.Insumo == null);
 }
Exemplo n.º 10
0
        protected void ImportEssoCard(List <ImportRow> rows)
        {
            var procesados  = 0;
            var erroneos    = 0;
            var sinProcesar = 0;
            var index       = 0;
            var start       = DateTime.Now.Ticks;

            lblResult.Text = "";

            foreach (var row in rows)
            {
                using (var transaction = SmartTransaction.BeginTransaction())
                {
                    try
                    {
                        index++;
                        var fecha   = DateTime.Parse(GetValue(row, Fields.Fecha.Value));
                        var horario = GetValue(row, Fields.Hora.Value);
                        if (horario.Length == 5)
                        {
                            horario = string.Concat("0", horario);
                        }
                        var hora = int.Parse(horario.Substring(0, 2));
                        var min  = int.Parse(horario.Substring(2, 2));
                        fecha = fecha.AddHours(hora).AddMinutes(min).ToDataBaseDateTime();

                        var patente      = GetValue(row, Fields.Driver.Value);
                        var kmDeclarados = ValidateDouble(GetValue(row, Fields.Odometro.Value), "");
                        var factura      = GetValue(row, Fields.NroAut.Value);

                        var vehiculo  = DAOFactory.CocheDAO.GetByPatente(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }, patente);
                        var proveedor = DAOFactory.ProveedorDAO.GetByDescripcion(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }, "Generico");

                        var consumo = DAOFactory.ConsumoCabeceraDAO.FindByDatos(fecha, kmDeclarados, factura, vehiculo != null ? vehiculo.Id : -1,
                                                                                proveedor != null ? proveedor.Id : -1, -1, -1);

                        if (consumo == null ||
                            consumo.Id == 0)
                        {
                            consumo = new ConsumoCabecera
                            {
                                Fecha          = fecha,
                                KmDeclarados   = kmDeclarados,
                                NumeroFactura  = factura,
                                ImporteTotal   = 0.0,
                                Estado         = ConsumoCabecera.Estados.Pagado,
                                Vehiculo       = vehiculo,
                                Proveedor      = proveedor,
                                TipoMovimiento = ConsumoCabecera.TiposMovimiento.ProveedorAVehiculo
                            };

                            if (FaltanDatosCabecera(consumo))
                            {
                                sinProcesar++;
                                Log("FALTAN DATOS", index, consumo);
                                continue;
                            }

                            if (SobranDatosCabecera(consumo))
                            {
                                sinProcesar++;
                                Log("SOBRAN DATOS", index, consumo);
                                continue;
                            }

                            if (!DAOFactory.ConsumoCabeceraDAO.IsFacturaUnique(consumo.NumeroFactura, consumo.Proveedor.Id, -1, consumo.Id))
                            {
                                sinProcesar++;
                                Log("FACTURA EXISTENTE", index, consumo);
                                continue;
                            }
                        }

                        var cantidad          = GetValue(row, Fields.Cantidad.Value);
                        var importeTotal      = GetValue(row, Fields.Valor.Value);
                        var insumoDescripcion = GetValue(row, Fields.Prod.Value).Trim();

                        var insumo = DAOFactory.InsumoDAO.GetByDescripcion(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }, new[] { -1 }, insumoDescripcion);

                        double cant, tot;

                        if (double.TryParse(cantidad, out cant) &&
                            double.TryParse(importeTotal, out tot))
                        {
                            var unit = tot / cant;

                            var detalle = new ConsumoDetalle {
                                Cantidad = cant, ImporteUnitario = unit, ImporteTotal = tot, Insumo = insumo
                            };
                            consumo.ImporteTotal = consumo.ImporteTotal + detalle.ImporteTotal;


                            DAOFactory.ConsumoCabeceraDAO.SaveOrUpdate(consumo);

                            if (FaltanDatosDetalle(detalle))
                            {
                                sinProcesar++;
                                Log("FALTAN DATOS", index, consumo);
                                transaction.Rollback();
                                continue;
                            }

                            try
                            {
                                detalle.ConsumoCabecera = consumo;
                                consumo.Detalles.Add(detalle);
                                DAOFactory.ConsumoCabeceraDAO.SaveOrUpdate(consumo);

                                var oInsumo = detalle.Insumo;
                                oInsumo.ValorReferencia = detalle.ImporteUnitario;
                                DAOFactory.InsumoDAO.SaveOrUpdate(oInsumo);

                                procesados++;

                                if (vehiculo != null)
                                {
                                    DAOFactory.MovOdometroVehiculoDAO.ResetByVehicleAndInsumo(vehiculo, detalle.Insumo);
                                }

                                transaction.Commit();
                            }
                            catch (Exception)
                            {
                                erroneos++;
                                Log("FILA ERRONEA", index, consumo);
                                transaction.Rollback();
                            }
                        }
                        else
                        {
                            erroneos++;
                            Log("FILA ERRONEA", index, consumo);
                        }
                    }
                    catch (Exception)
                    {
                        erroneos++;
                        Log("FILA ERRONEA", index, null);
                    }
                }
            }

            const int totalWidth = 200;
            var       percent    = index * 100 / rows.Count;

            litProgress.Text = string.Format(@"<div style='margin: auto; border: solid 1px #999999; background-color: #FFFFFF; width: {0}px; height: 10px;'>
                <div style='background-color: #0000AA; width: {1}px; height: 10px; font-size: 8px; color: #CCCCCC;'>{2}%</div>
                </div>", totalWidth, percent * totalWidth / 100, percent);
            lblDirs.Text     = string.Format(Reporte,
                                             procesados + erroneos,
                                             rows.Count,
                                             procesados,
                                             rows.Count > 0 ? (procesados * 100.0 / rows.Count).ToString("0.00") : "0.00",
                                             erroneos,
                                             rows.Count > 0 ? (erroneos * 100.0 / rows.Count).ToString("0.00") : "0.00",
                                             sinProcesar,
                                             rows.Count > 0 ? (sinProcesar * 100.0 / rows.Count).ToString("0.00") : "0.00",
                                             TimeSpan.FromTicks(DateTime.Now.Ticks - start));
            panelProgress.Visible = true;
        }
Exemplo n.º 11
0
        protected void ImportDefault(List <ImportRow> rows)
        {
            var procesados  = 0;
            var erroneos    = 0;
            var sinProcesar = 0;
            var index       = 0;
            var start       = DateTime.Now.Ticks;

            lblResult.Text = "";

            foreach (var row in rows)
            {
                using (var transaction = SmartTransaction.BeginTransaction())
                {
                    try
                    {
                        index++;
                        var fecha                      = DateTime.Parse(GetValue(row, Fields.Fecha.Value)).ToDataBaseDateTime();
                        var patente                    = GetValue(row, Fields.Vehiculo.Value);
                        var kmDeclarados               = ValidateDouble(GetValue(row, Fields.KmDeclarados.Value), "");
                        var factura                    = GetValue(row, Fields.Factura.Value);
                        var proveedorDescripcion       = GetValue(row, Fields.Proveedor.Value).Trim();
                        var depositoDescripcion        = GetValue(row, Fields.Deposito.Value).Trim();
                        var depositoDestinoDescripcion = GetValue(row, Fields.DepositoDestino.Value).Trim();

                        Coche     vehiculo        = null;
                        Proveedor proveedor       = null;
                        Deposito  deposito        = null;
                        Deposito  depositoDestino = null;

                        if (patente != string.Empty)
                        {
                            vehiculo = DAOFactory.CocheDAO.GetByPatente(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }, patente);
                        }
                        if (proveedorDescripcion != string.Empty)
                        {
                            proveedor = DAOFactory.ProveedorDAO.GetByDescripcion(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }, proveedorDescripcion);
                        }
                        if (depositoDescripcion != string.Empty)
                        {
                            deposito = DAOFactory.DepositoDAO.GetByDescripcion(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }, depositoDescripcion);
                        }
                        if (depositoDestinoDescripcion != string.Empty)
                        {
                            depositoDestino = DAOFactory.DepositoDAO.GetByDescripcion(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected },
                                                                                      depositoDestinoDescripcion);
                        }

                        var consumo = DAOFactory.ConsumoCabeceraDAO.FindByDatos(fecha, kmDeclarados, factura, vehiculo != null ? vehiculo.Id : -1,
                                                                                proveedor != null ? proveedor.Id : -1, deposito != null ? deposito.Id : -1, depositoDestino != null ? depositoDestino.Id : -1);

                        if (consumo == null ||
                            consumo.Id == 0)
                        {
                            short tipoMovimiento = 0;

                            if (deposito != null &&
                                depositoDestino != null)
                            {
                                tipoMovimiento = ConsumoCabecera.TiposMovimiento.DepositoADeposito;
                            }
                            if (deposito != null &&
                                vehiculo != null)
                            {
                                tipoMovimiento = ConsumoCabecera.TiposMovimiento.DepositoAVehiculo;
                            }
                            if (proveedor != null &&
                                depositoDestino != null)
                            {
                                tipoMovimiento = ConsumoCabecera.TiposMovimiento.ProveedorADeposito;
                            }
                            if (proveedor != null &&
                                vehiculo != null)
                            {
                                tipoMovimiento = ConsumoCabecera.TiposMovimiento.ProveedorAVehiculo;
                            }

                            consumo = new ConsumoCabecera
                            {
                                Fecha           = fecha,
                                KmDeclarados    = kmDeclarados,
                                NumeroFactura   = factura,
                                ImporteTotal    = 0.0,
                                Estado          = ConsumoCabecera.Estados.Pagado,
                                Vehiculo        = vehiculo,
                                Proveedor       = proveedor,
                                Deposito        = deposito,
                                DepositoDestino = depositoDestino,
                                TipoMovimiento  = tipoMovimiento
                            };

                            if (FaltanDatosCabecera(consumo))
                            {
                                sinProcesar++;
                                Log("FALTAN DATOS", index, consumo);
                                continue;
                            }

                            if (SobranDatosCabecera(consumo))
                            {
                                sinProcesar++;
                                Log("SOBRAN DATOS", index, consumo);
                                continue;
                            }

                            if (
                                !DAOFactory.ConsumoCabeceraDAO.IsFacturaUnique(consumo.NumeroFactura, consumo.Proveedor != null ? consumo.Proveedor.Id : -1,
                                                                               consumo.Deposito != null ? consumo.Deposito.Id : -1, consumo.Id))
                            {
                                sinProcesar++;
                                Log("FACTURA EXISTENTE", index, consumo);
                                continue;
                            }
                        }

                        var cantidad          = GetValue(row, Fields.Cantidad.Value);
                        var importeUnitario   = GetValue(row, Fields.ImporteUnitario.Value);
                        var importeTotal      = GetValue(row, Fields.ImporteTotal.Value);
                        var insumoDescripcion = GetValue(row, Fields.Insumo.Value).Trim();

                        var insumo = DAOFactory.InsumoDAO.GetByDescripcion(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }, new[] { -1 }, insumoDescripcion);

                        double cant, unit, tot;

                        if (double.TryParse(cantidad, out cant) &&
                            double.TryParse(importeUnitario, out unit) &&
                            double.TryParse(importeTotal, out tot))
                        {
                            if (tot > 0 &&
                                cant > 0)
                            {
                                unit = tot / cant;
                            }
                            else if (tot == 0 &&
                                     unit > 0 &&
                                     cant > 0)
                            {
                                tot = unit * cant;
                            }

                            var detalle = new ConsumoDetalle {
                                Cantidad = cant, ImporteUnitario = unit, ImporteTotal = tot, Insumo = insumo
                            };
                            consumo.ImporteTotal = consumo.ImporteTotal + detalle.ImporteTotal;


                            DAOFactory.ConsumoCabeceraDAO.SaveOrUpdate(consumo);

                            if (FaltanDatosDetalle(detalle))
                            {
                                sinProcesar++;
                                Log("FALTAN DATOS", index, consumo);
                                transaction.Rollback();
                                continue;
                            }

                            if (deposito != null &&
                                SinStock(deposito.Id, insumo.Id, cant))
                            {
                                sinProcesar++;
                                Log("SIN STOCK", index, consumo);
                                transaction.Rollback();
                                continue;
                            }

                            try
                            {
                                detalle.ConsumoCabecera = consumo;
                                consumo.Detalles.Add(detalle);
                                DAOFactory.ConsumoCabeceraDAO.SaveOrUpdate(consumo);

                                var oInsumo = detalle.Insumo;
                                oInsumo.ValorReferencia = detalle.ImporteUnitario;
                                DAOFactory.InsumoDAO.SaveOrUpdate(oInsumo);

                                if (consumo.Deposito != null)
                                {
                                    var stock = DAOFactory.StockDAO.GetByDepositoAndInsumo(consumo.Deposito.Id, detalle.Insumo.Id);
                                    stock.Cantidad -= detalle.Cantidad;

                                    DAOFactory.StockDAO.SaveOrUpdate(stock);

                                    if (stock.AlarmaActiva)
                                    {
                                        var msgSaver = new MessageSaver(DAOFactory);

                                        if (stock.Cantidad < stock.StockCritico)
                                        {
                                            msgSaver.Save(MessageIdentifier.StockCritic.ToString("d"), consumo.Vehiculo, consumo.Fecha, null,
                                                          "Alarma Stock Crítico");
                                        }
                                        else if (stock.Cantidad < stock.PuntoReposicion)
                                        {
                                            msgSaver.Save(MessageIdentifier.StockReposition.ToString("d"), consumo.Vehiculo, consumo.Fecha, null,
                                                          "Alarma Reposición de Stock");
                                        }
                                    }
                                }
                                if (consumo.DepositoDestino != null)
                                {
                                    var stock = DAOFactory.StockDAO.GetByDepositoAndInsumo(consumo.DepositoDestino.Id, detalle.Insumo.Id) ??
                                                new Stock {
                                        Deposito = consumo.DepositoDestino, Insumo = detalle.Insumo
                                    };
                                    stock.Cantidad += detalle.Cantidad;

                                    DAOFactory.StockDAO.SaveOrUpdate(stock);
                                }

                                procesados++;

                                if (vehiculo != null)
                                {
                                    DAOFactory.MovOdometroVehiculoDAO.ResetByVehicleAndInsumo(vehiculo, detalle.Insumo);
                                }

                                transaction.Commit();
                            }
                            catch (Exception)
                            {
                                erroneos++;
                                Log("FILA ERRONEA", index, consumo);
                                transaction.Rollback();
                            }
                        }
                        else
                        {
                            erroneos++;
                            Log("FILA ERRONEA", index, consumo);
                        }
                    }
                    catch (Exception)
                    {
                        erroneos++;
                        Log("FILA ERRONEA", index, null);
                    }
                }
            }
            const int totalWidth = 200;
            var       percent    = index * 100 / rows.Count;

            litProgress.Text = string.Format(@"<div style='margin: auto; border: solid 1px #999999; background-color: #FFFFFF; width: {0}px; height: 10px;'>
                <div style='background-color: #0000AA; width: {1}px; height: 10px; font-size: 8px; color: #CCCCCC;'>{2}%</div>
                </div>", totalWidth, percent * totalWidth / 100, percent);
            lblDirs.Text     = string.Format(Reporte, procesados + erroneos, rows.Count, procesados,
                                             rows.Count > 0 ? (procesados * 100.0 / rows.Count).ToString("0.00") : "0.00", erroneos,
                                             rows.Count > 0 ? (erroneos * 100.0 / rows.Count).ToString("0.00") : "0.00", sinProcesar,
                                             rows.Count > 0 ? (sinProcesar * 100.0 / rows.Count).ToString("0.00") : "0.00", TimeSpan.FromTicks(DateTime.Now.Ticks - start));
            panelProgress.Visible = true;
        }
Exemplo n.º 12
0
        protected override void OnExecute(Timer timer)
        {
            STrace.Trace(ComponentName, "Inicio de la tarea");

            var service  = new Service();
            var empresas = DaoFactory.EmpresaDAO.GetList();

            foreach (var empresa in empresas)
            {
                if (empresa.PumpHabilitado)
                {
                    var user     = empresa.PumpUsuario;
                    var password = empresa.PumpPassword;
                    var company  = empresa.PumpCompany;

                    STrace.Trace(ComponentName, string.Format("Pump Habilitado para: {0}", empresa.RazonSocial));

                    getFirstPendingTransactionResponse despacho;
                    try
                    {
                        despacho = service.GetFirstPendingTransaction(user, password, company);

                        if (despacho == null)
                        {
                            STrace.Trace(ComponentName, "Primer despacho == null");
                        }
                        if (despacho != null && despacho.trx_id == null)
                        {
                            STrace.Trace(ComponentName, "Primer despacho con id nulo");
                        }
                    }
                    catch (Exception ex) { STrace.Exception(ComponentName, ex); continue; }

                    while (despacho != null && despacho.trx_id != null && Convert.ToInt32(despacho.trx_id) > 0) // CONTROLAR QUE MANDA CUANDO NO HAY MAS DESPACHOS PENDIENTES
                    {
                        using (var transaction = SmartTransaction.BeginTransaction())
                        {
                            try
                            {
                                if (despacho.lastinformed_error_msg != null)
                                {
                                    throw new ApplicationException(despacho.lastinformed_error_msg);
                                }

                                var patente = despacho.car_plate;
                                if (patente == string.Empty)
                                {
                                    switch (company)
                                    {
                                    case "PAV":
                                        patente = "EXTRAS";
                                        break;

                                    case "TO":
                                        patente = "PLAYERO";
                                        break;
                                    }
                                }

                                var vehiculo = DaoFactory.CocheDAO.FindByPatente(-1, patente);
                                if (vehiculo == null)
                                {
                                    throw new ApplicationException(string.Format("Vehículo no encontrado: Patente: {0}", patente));
                                }

                                var deposito = DaoFactory.DepositoDAO.FindByCode(new[] { vehiculo.Empresa.Id },
                                                                                 new[] { vehiculo.Linea != null ? vehiculo.Linea.Id : -1 }, despacho.store);
                                if (deposito == null)
                                {
                                    throw new ApplicationException(string.Format("Depósito no encontrado: Codigo {0}", despacho.store));
                                }

                                var insumo = DaoFactory.InsumoDAO.FindByCode(new[] { vehiculo.Empresa.Id },
                                                                             new[] { vehiculo.Linea != null ? vehiculo.Linea.Id : -1 }, /*despacho.prod_id*/ "1");
                                if (insumo == null)
                                {
                                    throw new ApplicationException(string.Format("Insumo no encontrado: Codigo {0}", despacho.prod_id));
                                }

                                var nroFactura       = despacho.trx_id;
                                var consumoExistente = DaoFactory.ConsumoCabeceraDAO.FindByNroFactura(new[] { vehiculo.Empresa.Id },
                                                                                                      new[] { vehiculo.Linea != null ? vehiculo.Linea.Id : -1 }, nroFactura);
                                if (consumoExistente != null)
                                {
                                    STrace.Trace(ComponentName, string.Format("Despacho ya procesado: Factura Nro {0}", nroFactura));
                                    continue;
                                }

                                var stock = DaoFactory.StockDAO.GetByDepositoAndInsumo(deposito.Id, insumo.Id) ??
                                            new Stock {
                                    Deposito = deposito, Insumo = insumo
                                };
                                var fecha          = Convert.ToDateTime(despacho.trx_date);
                                var precioUnitario = Convert.ToDouble(despacho.ppu, CultureInfo.InvariantCulture);
                                var cantidad       = Convert.ToDouble(despacho.trx_volume, CultureInfo.InvariantCulture);
                                var precioTotal    = Convert.ToDouble(despacho.amount, CultureInfo.InvariantCulture);
                                var km             = Convert.ToDouble(despacho.car_kilometer, CultureInfo.InvariantCulture);

                                var consumoCabecera = new ConsumoCabecera
                                {
                                    Deposito       = deposito,
                                    Estado         = ConsumoCabecera.Estados.Pagado,
                                    Fecha          = fecha.AddHours(3),
                                    ImporteTotal   = precioTotal,
                                    KmDeclarados   = km,
                                    NumeroFactura  = nroFactura,
                                    TipoMovimiento = ConsumoCabecera.TiposMovimiento.DepositoAVehiculo,
                                    Vehiculo       = vehiculo
                                };

                                DaoFactory.ConsumoCabeceraDAO.SaveOrUpdate(consumoCabecera);

                                var consumoDetalle = new ConsumoDetalle
                                {
                                    Cantidad        = cantidad,
                                    ConsumoCabecera = consumoCabecera,
                                    ImporteTotal    = precioTotal,
                                    ImporteUnitario = precioUnitario,
                                    Insumo          = insumo
                                };

                                stock.Cantidad -= consumoDetalle.Cantidad;

                                DaoFactory.ConsumoDetalleDAO.SaveOrUpdate(consumoDetalle);
                                DaoFactory.StockDAO.SaveOrUpdate(stock);

                                if (stock.AlarmaActiva)
                                {
                                    if (stock.Cantidad < stock.StockCritico)
                                    {
                                        MessageSaver.Save(MessageIdentifier.StockCritic.ToString("d"), consumoCabecera.Vehiculo, consumoCabecera.Fecha, null,
                                                          "Alarma Stock Crítico");
                                    }
                                    else if (stock.Cantidad < stock.PuntoReposicion)
                                    {
                                        MessageSaver.Save(MessageIdentifier.StockReposition.ToString("d"), consumoCabecera.Vehiculo, consumoCabecera.Fecha, null,
                                                          "Alarma Reposición de Stock");
                                    }
                                }

                                transaction.Commit();

                                STrace.Trace(ComponentName, consumoCabecera.Vehiculo.Dispositivo != null ? consumoCabecera.Vehiculo.Dispositivo.Id : 0,
                                             string.Format("Despacho importado - Fecha: {0:dd/MM/yyyy HH:mm} - Factura: {1}", consumoCabecera.Fecha.AddHours(-3),
                                                           consumoCabecera.NumeroFactura));

                                var confirmacion = service.SetLastInformedTransaction(user, password, company, despacho.trx_id);
                                if (confirmacion.lastinformed_error_msg != null)
                                {
                                    STrace.Trace(ComponentName, consumoCabecera.Vehiculo.Dispositivo != null ? consumoCabecera.Vehiculo.Dispositivo.Id : 0,
                                                 string.Format("Mensaje de confirmación: {0}", confirmacion.lastinformed_error_msg));
                                }
                            }
                            catch (Exception ex)
                            {
                                STrace.Exception(ComponentName, ex);
                                transaction.Rollback();
                            }
                            finally
                            {
                                despacho = service.GetFirstPendingTransaction(user, password, company, despacho.trx_id);
                            }
                        }
                    }
                }
                else
                {
                    STrace.Trace(ComponentName, string.Format("Pump No Habilitado para: {0}", empresa.RazonSocial));
                }
            }
        }