public void EnviarNovedades() { try { CedForecastDB.Bejerman.Ventas datos = new CedForecastDB.Bejerman.Ventas(sesion); List<CedForecastEntidades.Bejerman.Ventas> lista = datos.LeerNovedades(periodo); WS.Sincronizacion ws = new WS.Sincronizacion(); ws.Url = cedForecastWSRUL; contador = 0; contadorTope = lista.Count; ws.IniciarEnvioVenta(); for (contador = 0; contador < contadorTope; contador++) { WS.Venta elemento = new WS.Venta(); elemento.IdPeriodo = periodo; elemento.IdArticulo = lista[contador].Sdvart_CodGen; elemento.IdCliente = lista[contador].Cve_CodCli; elemento.Cantidad = lista[contador].Sdv_CantUM1; ws.EnviarVenta(elemento); } ws.TerminarEnvioVenta(); } catch (Exception Ex) { errores.Add(Ex); } }
public List<CedForecastEntidades.RFoPA> Lista(CedForecastEntidades.RFoPA Forecast, string TipoReporte, string ListaArticulos, string ListaClientes, string ListaVendedores) { cantidadFilas = 0; System.Text.StringBuilder a = new StringBuilder(); a.Append("select Forecast.IdTipoPlanilla, Forecast.IdCuenta, Forecast.IdCliente, Forecast.IdPeriodo, Forecast.IdArticulo, Forecast.Cantidad, isnull(FamiliaArticulo.IdFamiliaArticulo, '') as IdFamiliaArticulo, isnull(FamiliaArticulo.DescrFamiliaArticulo, '') as DescrFamiliaArticulo "); //Articulo.DescrArticulo, Articulo.IdGrupoArticulo, GrupoArticulo.DescrGrupoArticulo, Division.IdDivision, Division.DescrDivision, a.Append("from Forecast left outer join FamiliaArticuloXArticulo on Forecast.IdArticulo = FamiliaArticuloXArticulo.IdArticulo "); a.Append("left outer join FamiliaArticulo on FamiliaArticuloXArticulo.IdFamiliaArticulo = FamiliaArticulo.IdFamiliaArticulo "); //, Articulo, GrupoArticulo, Division "); a.Append("where Forecast.IdTipoPlanilla='" + Forecast.IdTipoPlanilla + "' "); //Forecast.IdArticulo=Articulo.IdArticulo and Articulo.IdGrupoArticulo=GrupoArticulo.IdGrupoArticulo and GrupoArticulo.IdDivision=Division.IdDivision if (ListaArticulos != "") { a.Append("and Forecast.IdArticulo in (" + ListaArticulos + ") "); } if (ListaClientes != "") { a.Append("and Forecast.IdCliente in (" + ListaClientes + ") "); } if (ListaVendedores != "") { a.Append("and Forecast.IdCuenta in (" + ListaVendedores + ") "); } if (Forecast.IdCliente != null && Forecast.IdCliente != "") { a.Append("and Forecast.IdCliente='" + Forecast.IdCliente + "' "); } string periodo = ""; periodo = UltimoMesForecast(Forecast.IdPeriodo); if (Forecast.IdTipoPlanilla == "Proyectado" && Forecast.IdPeriodo.Substring(0, 4) == periodo.Substring(0, 4)) { periodo = Forecast.IdPeriodo.Substring(0, 4) + "99"; } a.Append("and IdPeriodo >= '" + Forecast.IdPeriodo + "' "); a.Append("and IdPeriodo <= '" + periodo + "' "); switch (TipoReporte) { case "FamArtCliVen": case "FamArtCli": case "FamArt": a.Append("order by IdArticulo asc, IdCliente asc, IdCuenta asc, IdPeriodo asc "); break; case "FamArtVen": a.Append("order by IdArticulo asc, IdCuenta asc, IdCliente asc, IdPeriodo asc "); break; case "Fam": a.Append("order by IdFamiliaArticulo asc, IdArticulo asc, IdCuenta asc, IdCliente asc, IdPeriodo asc "); break; } DataTable dt = new DataTable(); dt = (DataTable)Ejecutar(a.ToString(), TipoRetorno.TB, Transaccion.NoAcepta, sesion.CnnStr); List<CedForecastEntidades.RFoPA> lista = new List<CedForecastEntidades.RFoPA>(); if (dt.Rows.Count != 0) { CedForecastEntidades.RFoPA forecast = new CedForecastEntidades.RFoPA(); string idClave = ""; idClave = ObtenerClaveXTipoReporte(dt.Rows[0], TipoReporte); CopiarCab(dt.Rows[0], forecast, Forecast.IdPeriodo); //Lista de ventas para Rolling Forecast List<CedForecastEntidades.Bejerman.Ventas> ventas = new List<CedForecastEntidades.Bejerman.Ventas>(); List<CedForecastEntidades.RFoPA> totalProyectadoLista = new List<CedForecastEntidades.RFoPA>(); if (Forecast.IdTipoPlanilla == "RollingForecast") { CedForecastDB.Bejerman.Ventas db = new CedForecastDB.Bejerman.Ventas(sesion); ventas = db.LeerParaRF(Forecast.IdPeriodo, TipoReporte); CedForecastEntidades.Bejerman.Ventas venta = new CedForecastEntidades.Bejerman.Ventas(); switch (TipoReporte) { case "FamArtCli": venta = ventas.Find((delegate(CedForecastEntidades.Bejerman.Ventas e) { return e.Cve_CodCli == dt.Rows[0]["IdCliente"].ToString() && e.Sdvart_CodGen == dt.Rows[0]["IdArticulo"].ToString(); })); break; case "FamArt": venta = ventas.Find((delegate(CedForecastEntidades.Bejerman.Ventas e) { return e.Sdvart_CodGen == dt.Rows[0]["IdArticulo"].ToString(); })); break; } if (venta != null) { forecast.Ventas = venta.Sdv_CantUM1; } //Lista de totales proyectados por articulo totalProyectadoLista = TotalProyectado(Forecast); ////Buscar total proyectado CedForecastEntidades.RFoPA totalProyectado = new CedForecastEntidades.RFoPA(); totalProyectado = totalProyectadoLista.Find((delegate(CedForecastEntidades.RFoPA e) { return e.IdCliente == dt.Rows[0]["IdCliente"].ToString() && e.Articulo.Art_CodGen == dt.Rows[0]["IdArticulo"].ToString(); })); if (totalProyectado != null) { forecast.Proyectado = totalProyectado.Proyectado; } } for (int i = 0; i < dt.Rows.Count; i++) { string periodoInicial = Forecast.IdPeriodo; //if (Forecast.IdTipoPlanilla == "Proyectado") //{ // periodoInicial = periodoInicial + "01"; //} int mes = 0; if (Forecast.IdTipoPlanilla == "Proyectado" && (dt.Rows[i]["IdPeriodo"].ToString().Substring(4, 2) == "13" || dt.Rows[i]["IdPeriodo"].ToString().Substring(4, 2) == "14")) { mes = Convert.ToInt32(dt.Rows[i]["IdPeriodo"].ToString().Substring(4, 2)); } else { mes = MesAProcesar(dt.Rows[i]["IdPeriodo"].ToString(), periodoInicial); } //Clave para armado de info según agrupamiento string claveAux = ObtenerClaveXTipoReporte(dt.Rows[i], TipoReporte); if (idClave != claveAux) { idClave = claveAux; lista.Add(forecast); forecast = new CedForecastEntidades.RFoPA(); CopiarCab(dt.Rows[i], forecast, Forecast.IdPeriodo); if (Forecast.IdTipoPlanilla == "RollingForecast") { //Buscar ventas reales //CedForecastDB.Bejerman.Ventas db = new CedForecastDB.Bejerman.Ventas(sesion); //ventas = db.LeerParaRF(Forecast.IdPeriodo, TipoReporte); CedForecastEntidades.Bejerman.Ventas venta = new CedForecastEntidades.Bejerman.Ventas(); switch (TipoReporte) { case "FamArtCli": venta = ventas.Find((delegate(CedForecastEntidades.Bejerman.Ventas e) { return e.Cve_CodCli == dt.Rows[i]["IdCliente"].ToString() && e.Sdvart_CodGen == dt.Rows[i]["IdArticulo"].ToString(); })); break; case "FamArt": venta = ventas.Find((delegate(CedForecastEntidades.Bejerman.Ventas e) { return e.Sdvart_CodGen == dt.Rows[i]["IdArticulo"].ToString(); })); break; } if (venta != null) { forecast.Ventas = venta.Sdv_CantUM1; } //Buscar total proyectado CedForecastEntidades.RFoPA totalProyectado = new CedForecastEntidades.RFoPA(); totalProyectado = totalProyectadoLista.Find((delegate(CedForecastEntidades.RFoPA e) { return e.IdCliente == dt.Rows[i]["IdCliente"].ToString() && e.Articulo.Art_CodGen == dt.Rows[i]["IdArticulo"].ToString(); })); if (totalProyectado != null) { forecast.Proyectado = totalProyectado.Proyectado; } } } CopiarDet(dt.Rows[i], forecast, mes); } lista.Add(forecast); } cantidadFilas = lista.Count; return lista; }
public static DataTable ResumenArgentinaXZonas(string PeriodoDesde, string PeriodoHasta, string TipoReporte, string ListaArticulos, string ListaClientes, string ListaVendedores, bool Valorizado, CedEntidades.Sesion Sesion, out List<CedForecastEntidades.Advertencia> Advertencias) { Advertencias = new List<CedForecastEntidades.Advertencia>(); //Validacion de parámetros if (ListaArticulos == String.Empty) { throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Articulo(s)"); } if (ListaClientes == String.Empty) { throw new Microsoft.ApplicationBlocks.ExceptionManagement.Validaciones.ValorNoInfo("Cliente(s)"); } //Leer datos Forecast CedForecastDB.Forecast db = new CedForecastDB.Forecast(Sesion); DataSet ds = db.LeerDatosParaResumenArgentinaXZonas(PeriodoDesde, PeriodoHasta, TipoReporte, ListaArticulos, ListaClientes, ListaVendedores); DataTable dtZona; DataTable dtVendedor; switch (TipoReporte) { case "Zona-Familia-Articulo": dtZona = ds.Tables[0]; break; case "Vendedor-Familia-Articulo": dtVendedor = ds.Tables[0]; break; } DataTable dtFamilia = ds.Tables[1]; DataTable dtArticulos = ds.Tables[2]; DataTable dtDatos = ds.Tables[3]; //Leer datos Bejerman List<CedForecastEntidades.Bejerman.Zona> zonas = new CedForecastDB.Bejerman.Zona(Sesion).LeerLista(); List<CedForecastEntidades.Bejerman.Vendedor> vendedores = new CedForecastDB.Bejerman.Vendedor(Sesion).LeerLista(); List<CedForecastEntidades.Bejerman.Articulos> articulos = new CedForecastDB.Bejerman.Articulos(Sesion).LeerListaConPrecios(); List<CedForecastEntidades.ArticuloInfoAdicional> familiaXArticulos = new CedForecastDB.ArticuloInfoAdicional(Sesion).LeerLista(); //Crear crosstab DataTable dt = new DataTable(); dt.Columns.Add(ClonarColumna(dtDatos.Columns[0])); //Empresa dt.Columns.Add(ClonarColumna(dtDatos.Columns[1])); //Zona o Vendedor dt.Columns.Add(ClonarColumna(dtDatos.Columns["Familia"])); dt.Columns.Add(ClonarColumna(dtDatos.Columns["Articulo"])); string idPeriodo = ""; DateTime periodoDesde = Convert.ToDateTime("01/" + PeriodoDesde.Substring(4, 2) + "/" + PeriodoDesde.Substring(0, 4)); DateTime periodoHasta = Convert.ToDateTime("01/" + PeriodoHasta.Substring(4, 2) + "/" + PeriodoHasta.Substring(0, 4)); int meses = periodoHasta.Month - periodoDesde.Month + 1; int años = periodoHasta.Year - periodoDesde.Year; meses += años * 12; idPeriodo = periodoDesde.ToString("yyyyMM"); for (int i = 1; i <= meses; i++) { dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Plan-" + idPeriodo, "Plan-" + idPeriodo)); dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Real-" + idPeriodo, "Real-" + idPeriodo)); idPeriodo = periodoDesde.AddMonths(i).ToString("yyyyMM"); } dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Total Plan", "Total Plan")); dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Total Real", "Total Real")); dt.Columns.Add(ClonarColumna(dtDatos.Columns["Cantidad"], "Desvio Plan", "Desvio Plan")); //Llenar crosstab string claveAnterior = String.Empty; //Buscar Ventas CedForecastDB.Bejerman.Ventas dbVentas = new CedForecastDB.Bejerman.Ventas(Sesion); List<CedForecastEntidades.Bejerman.Ventas> ventas = dbVentas.LeerParaResumenArgentinaXZonas(TipoReporte, PeriodoDesde, PeriodoHasta, ListaArticulos, ListaClientes, ListaVendedores); decimal precio = 0; for (int i = 0; i < ventas.Count; i++) { string familia = ""; CedForecastEntidades.ArticuloInfoAdicional articuloInfoAdicional = familiaXArticulos.Find(delegate(CedForecastEntidades.ArticuloInfoAdicional c) { return c.IdArticulo == Convert.ToString(ventas[i].Sdvart_CodGen); }); if (articuloInfoAdicional != null) { familia = articuloInfoAdicional.IdFamiliaArticulo; } DataRow[] drv; switch (TipoReporte) { case "Zona-Familia-Articulo": drv = dtDatos.Select("Zona = '" + ventas[i].Zona + "' and Articulo = '" + ventas[i].Sdvart_CodGen + "' and Periodo = '" + ventas[i].Periodo + "'"); if (drv.Length == 0) { dtDatos.Rows.Add("Empresa", ventas[i].Zona, familia, ventas[i].Sdvart_CodGen, ventas[i].Sdvart_CodGen, ventas[i].Periodo, 0); } break; case "Vendedor-Familia-Articulo": drv = dtDatos.Select("Vendedor = '" + ventas[i].Vendedor + "' and Articulo = '" + ventas[i].Sdvart_CodGen + "' and Periodo = '" + ventas[i].Periodo + "'"); if (drv.Length == 0) { dtDatos.Rows.Add("Empresa", ventas[i].Vendedor, familia, ventas[i].Sdvart_CodGen, ventas[i].Sdvart_CodGen, ventas[i].Periodo, 0); } break; } } //Ordenar datos switch (TipoReporte) { case "Zona-Familia-Articulo": dtDatos.DefaultView.Sort = "Zona ASC, Familia ASC, Articulo ASC"; break; case "Vendedor-Familia-Articulo": dtDatos.DefaultView.Sort = "Vendedor ASC, Familia ASC, Articulo ASC"; break; } for (int i = 0; i < dtDatos.DefaultView.Count; i++) { string claveActual = Convert.ToString(dtDatos.DefaultView[i][1]) + Convert.ToString(dtDatos.DefaultView[i]["Familia"]) + Convert.ToString(dtDatos.DefaultView[i]["Articulo"]); if (claveAnterior != claveActual) { DataRow dr = dt.NewRow(); dr["Empresa"] = "Empresa"; CedForecastEntidades.ArticuloInfoAdicional familiaXArticulo = familiaXArticulos.Find(delegate(CedForecastEntidades.ArticuloInfoAdicional c) { return c.IdArticulo == Convert.ToString(dtDatos.DefaultView[i]["Articulo"]); }); if (familiaXArticulo == null) { dr["Familia"] = "<<<Desconocida>>>"; Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-01", "Artículo " + Convert.ToString(dtDatos.DefaultView[i]["Articulo"]) + " sin familia definida", CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia)); } else { dr["Familia"] = familiaXArticulo.DescrFamiliaArticulo; } CedForecastEntidades.Bejerman.Articulos articulo = articulos.Find(delegate(CedForecastEntidades.Bejerman.Articulos c) { return c.Art_CodGen == Convert.ToString(dtDatos.DefaultView[i]["Articulo"]); }); if (articulo == null) { dr["Articulo"] = Convert.ToString(dtDatos.DefaultView[i]["Articulo"]) + "-<<<Desconocido>>>"; Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-02", "Descripción no encontrada para el artículo " + Convert.ToString(dtDatos.DefaultView[i]["Articulo"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia)); precio = 0; } else { dr["Articulo"] = Convert.ToString(dtDatos.DefaultView[i]["Articulo"]) + "-" + articulo.Art_DescGen; precio = articulo.Lpr_Precio; } if (precio == 0) { Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-03", "Precio no encontrado para el artículo " + Convert.ToString(dtDatos.DefaultView[i]["Articulo"]), CedForecastEntidades.Advertencia.TipoSeveridad.Error)); } switch (TipoReporte) { case "Zona-Familia-Articulo": CedForecastEntidades.Bejerman.Zona zona = zonas.Find(delegate(CedForecastEntidades.Bejerman.Zona c) { return c.Zon_Cod == Convert.ToString(dtDatos.DefaultView[i]["Zona"]); }); if (zona == null) { dr["Zona"] = Convert.ToString(dtDatos.DefaultView[i]["Zona"]) + "-<<<Desconocido>>>"; Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-04", "Descripción no encontrada para la zona " + Convert.ToString(dtDatos.DefaultView[i]["Zona"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia)); } else { dr["Zona"] = Convert.ToString(dtDatos.DefaultView[i]["Zona"]) + "-" + zona.Zon_Desc; } break; case "Vendedor-Familia-Articulo": CedForecastEntidades.Bejerman.Vendedor vendedor = vendedores.Find(delegate(CedForecastEntidades.Bejerman.Vendedor c) { return c.Ven_Cod == Convert.ToString(dtDatos.DefaultView[i]["Vendedor"]); }); if (vendedor == null) { dr["Vendedor"] = Convert.ToString(dtDatos.DefaultView[i]["Vendedor"]) + "-<<<Desconocido>>>"; Advertencias.Add(new CedForecastEntidades.Advertencia("CTabAC-04", "Descripción no encontrada para el vendedor " + Convert.ToString(dtDatos.DefaultView[i]["Vendedor"]), CedForecastEntidades.Advertencia.TipoSeveridad.Advertencia)); } else { dr["Vendedor"] = Convert.ToString(dtDatos.DefaultView[i]["Vendedor"]) + "-" + vendedor.Ven_Desc; } break; } if (!Valorizado) { precio = 1; } else { if (articulo == null) { precio = 0; } else { precio = articulo.Lpr_Precio; } } dr["Total Plan"] = 0; dr["Total Real"] = 0; dt.Rows.Add(dr); claveAnterior = claveActual; } decimal valor = Convert.ToDecimal(dtDatos.DefaultView[i]["Cantidad"]) * precio; dt.Rows[dt.Rows.Count - 1]["Plan-" + dtDatos.DefaultView[i]["Periodo"].ToString()] = valor; //Completo ventas CedForecastEntidades.Bejerman.Ventas venta = new CedForecastEntidades.Bejerman.Ventas(); switch (TipoReporte) { case "Zona-Familia-Articulo": venta = ventas.Find((delegate(CedForecastEntidades.Bejerman.Ventas e) { return e.Zona == dtDatos.DefaultView[i]["Zona"].ToString() && e.Sdvart_CodGen == dtDatos.DefaultView[i]["Articulo"].ToString() && e.Periodo == dtDatos.DefaultView[i]["Periodo"].ToString(); })); break; case "Vendedor-Familia-Articulo": venta = ventas.Find((delegate(CedForecastEntidades.Bejerman.Ventas e) { return e.Vendedor == dtDatos.DefaultView[i]["Vendedor"].ToString() && e.Sdvart_CodGen == dtDatos.DefaultView[i]["Articulo"].ToString() && e.Periodo == dtDatos.DefaultView[i]["Periodo"].ToString(); })); break; } decimal valorReal = 0; if (venta != null) { if (Valorizado) { valorReal = venta.Sdv_ImpTot; } else { valorReal = venta.Sdv_CantUM1; } dt.Rows[dt.Rows.Count - 1]["Real-" + dtDatos.DefaultView[i]["Periodo"].ToString()] = valorReal; } //Sumar a Total dt.Rows[dt.Rows.Count - 1]["Total Plan"] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Plan"]) + valor; dt.Rows[dt.Rows.Count - 1]["Total Real"] = Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Real"]) + valorReal; dt.Rows[dt.Rows.Count - 1]["Desvio Plan"] = 0; if (Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Plan"]) > 0) { dt.Rows[dt.Rows.Count - 1]["Desvio Plan"] = (Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Real"]) / Convert.ToDecimal(dt.Rows[dt.Rows.Count - 1]["Total Plan"]) - 1) * 100; } dt.AcceptChanges(); } return dt; }