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; }
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; }
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); }
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); }
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); }
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; } } } }
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; }
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); }
private static bool FaltanDatosDetalle(ConsumoDetalle detalle) { return(detalle.Insumo == null); }
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; }
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; }
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)); } } }