private void Log(string status, int index, ConsumoCabecera cons) { lblResult.Text += string.Format(Result, new[] { status, " INDICE: " + index, " Vehiculo = " + ((cons != null && cons.Vehiculo != null) ? cons.Vehiculo.ToString() : "VACIO"), " Proveedor = " + ((cons != null && cons.Proveedor != null) ? cons.Proveedor.ToString() : "VACIO"), " Deposito = " + ((cons != null && cons.Deposito != null) ? cons.Deposito.ToString() : "VACIO"), " Deposito Destino = " + ((cons != null && cons.DepositoDestino != null) ? cons.DepositoDestino.ToString() : "VACIO") }); }
public ConsumoCCVo(ConsumoCabecera consumo, int centroDeCostoId) { Id = consumo.Id; Fecha = consumo.Fecha.ToDisplayDateTime(); KmDeclarados = consumo.KmDeclarados; NumeroFactura = consumo.NumeroFactura; ImporteTotal = consumo.ImporteTotal; Proveedor = consumo.Proveedor != null ? consumo.Proveedor.ToString() : consumo.Deposito != null ? consumo.Deposito.ToString() : string.Empty; Vehiculo = consumo.Vehiculo != null ? consumo.Vehiculo.ToString() : consumo.DepositoDestino != null ? consumo.DepositoDestino.ToString() : string.Empty; var dao = new DAOFactory(); var centroDeCosto = dao.CentroDeCostosDAO.FindById(centroDeCostoId); CentroDeCosto = centroDeCosto != null ? centroDeCosto.Descripcion : string.Empty; }
private static bool SobranDatosCabecera(ConsumoCabecera consumo) { return((consumo.Deposito != null && consumo.Proveedor != null) || (consumo.Vehiculo != null && consumo.DepositoDestino != null)); }
private static bool FaltanDatosCabecera(ConsumoCabecera consumo) { return((consumo.Deposito == null && consumo.Proveedor == null) || (consumo.Vehiculo == null && consumo.DepositoDestino == 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)); } } }