protected string Grabar(string sSerie, string sNumero, string sImpTot, string sAnoMes, string sClaseEco, string strLineas) { string sResul = "", sDesc = "", t376_motivo = "";//, sElementosInsertados = ""; int idDatoEcoFact, idDatoEcoCob, nAnoMesFact, nAnoMesCobro, idT305, idT325, t329_idclaseeco = -1; int? t313_idempresa = null; int? t302_idcliente = null; DateTime?dtFecha = System.DateTime.Today; decimal dTotalFact = decimal.Parse(sImpTot), dImpLinea, dAux, dCobro; bool bProrratear = false; string sRefCliente = ""; #region abrir conexión y transacción serializable try { oConn = Conexion.Abrir(); tr = Conexion.AbrirTransaccionSerializable(oConn); } catch (Exception ex) { if (oConn.State == ConnectionState.Open) { Conexion.Cerrar(oConn); } sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex); return(sResul); } #endregion try { nAnoMesFact = int.Parse(sAnoMes); #region Obtener datos de la primera línea de la factura SqlDataReader drLineas = Factura.Lineas(tr, sSerie, int.Parse(sNumero)); if (drLineas.Read()) { t329_idclaseeco = int.Parse(drLineas["t329_idclaseeco"].ToString()); t376_motivo = drLineas["t376_motivo"].ToString(); if (drLineas["t376_fecha"].ToString() != "") { dtFecha = DateTime.Parse(drLineas["t376_fecha"].ToString()); } else { dtFecha = null; } if (drLineas["t313_idempresa"].ToString() != "") { t313_idempresa = int.Parse(drLineas["t313_idempresa"].ToString()); } else { t313_idempresa = null; } if (drLineas["t302_idcliente"].ToString() != "") { t302_idcliente = int.Parse(drLineas["t302_idcliente"].ToString()); } else { t302_idcliente = null; } if (drLineas["t376_refcliente"].ToString() != "") { sRefCliente = drLineas["t376_refcliente"].ToString(); } } drLineas.Close(); drLineas.Dispose(); #endregion #region Cargar Cobros agrupados por mes en el array slCobros ArrayList slCobros = new ArrayList(); SqlDataReader drCobros = Factura.CobrosMes(tr, sSerie, int.Parse(sNumero)); while (drCobros.Read()) { string[] aDatosAux = new string[] { drCobros["t325_anomes"].ToString(), drCobros["cobro"].ToString(), drCobros["fecha"].ToString() }; slCobros.Add(aDatosAux); } drCobros.Close(); drCobros.Dispose(); #endregion #region Actualizar lineas de factura string[] aLinea = Regex.Split(strLineas, "///"); //Para cada linea de factura foreach (string oLinea in aLinea) { if (oLinea == "") { continue; } string[] aValores = Regex.Split(oLinea, "##"); //0. Opcion BD. "I", "U", "D" //1. ID datoEco //2. idT305 //3. Importe linea factura switch (aValores[0]) { case "I": bProrratear = true; //if (sElementosInsertados == "") sElementosInsertados = nAux.ToString(); //else sElementosInsertados += "//" + nAux.ToString(); idT305 = int.Parse(aValores[2]); dImpLinea = decimal.Parse(aValores[3]); idT325 = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, idT305, nAnoMesFact); if (idT325 == 0) { idT325 = SEGMESPROYECTOSUBNODO.InsertSiNoExiste(tr, idT305, nAnoMesFact); } idDatoEcoFact = DATOECO.InsertFactura(tr, idT325, int.Parse(sClaseEco), t376_motivo, dImpLinea, null, null, dtFecha, sSerie, int.Parse(sNumero), t313_idempresa, t302_idcliente, null, sRefCliente); break; case "U": bProrratear = true; idDatoEcoFact = int.Parse(aValores[1]); dImpLinea = decimal.Parse(aValores[3]); DATOECO.UpdateImporte(tr, idDatoEcoFact, dImpLinea); break; case "D": bProrratear = true; DATOECO.Delete(tr, int.Parse(aValores[1])); break; } } #endregion #region cobros //Reparto lo cobrado entre las lineas de factura resultantes if (bProrratear) { #region Obtener datos de las líneas de la factura ArrayList slLineas = new ArrayList(); SqlDataReader drLineas2 = Factura.Lineas(tr, sSerie, int.Parse(sNumero)); while (drLineas2.Read()) { string[] aDatosAux = new string[] { drLineas2["t305_idproyectosubnodo"].ToString(), drLineas2["t376_iddatoeco"].ToString(), drLineas2["t376_importe"].ToString() }; slLineas.Add(aDatosAux); } drLineas2.Close(); drLineas2.Dispose(); #endregion //Para cada mes con cobro for (int iFilaCob = 0; iFilaCob < slCobros.Count; iFilaCob++) { nAnoMesCobro = int.Parse(((string[])slCobros[iFilaCob])[0]); dCobro = decimal.Parse(((string[])slCobros[iFilaCob])[1]); if (((string[])slCobros[iFilaCob])[2] != "") { dtFecha = DateTime.Parse(((string[])slCobros[iFilaCob])[2]); } else { dtFecha = null; } //Para cada linea de factura for (int iFilaFac = 0; iFilaFac < slLineas.Count; iFilaFac++) { idT305 = int.Parse(((string[])slLineas[iFilaFac])[0]); idDatoEcoFact = int.Parse(((string[])slLineas[iFilaFac])[1]); dImpLinea = decimal.Parse(((string[])slLineas[iFilaFac])[2]); dAux = (dImpLinea / dTotalFact) * dCobro; //Miro si hay cobro para esa linea de factura idDatoEcoCob = DATOECO.ExisteCobro(tr, nAnoMesCobro, idDatoEcoFact); if (idDatoEcoCob == 0) { idT325 = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, idT305, nAnoMesCobro); if (idT325 == 0) { idT325 = SEGMESPROYECTOSUBNODO.InsertSiNoExiste(tr, idT305, nAnoMesCobro); } DATOECO.InsertCobro(tr, idT325, dAux, dtFecha, idDatoEcoFact, sSerie, int.Parse(sNumero)); } else { DATOECO.UpdateImporte(tr, idDatoEcoCob, dAux); } } } } #endregion Conexion.CommitTransaccion(tr); sResul = "OK@#@";// +sElementosInsertados; } catch (Exception ex) { Conexion.CerrarTransaccion(tr); sResul = "Error@#@" + Errores.mostrarError("Error al grabar la factura.", ex, false) + "@#@" + sDesc; } finally { Conexion.Cerrar(oConn); } return(sResul); }
protected string procesar(string sAnomesProceso, string sCadena) { string sResul = "OK@#@"; string sEstadoMes = ""; int iNumLin = 1, iAnomes; int it325_idsegmesproy, iClaseEco; #region abrir conexión y transacción try { oConn = Conexion.Abrir(); tr = Conexion.AbrirTransaccion(oConn); } catch (Exception ex) { if (oConn.State == ConnectionState.Open) { Conexion.Cerrar(oConn); } return("Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex)); } #endregion try { SqlDataReader dr = INTERFACTSAP.Catalogo(); iAnomes = int.Parse(sAnomesProceso); ArrayList slProyPP = new ArrayList(); while (dr.Read()) { if (sCadena.IndexOf("##" + iNumLin.ToString() + "##") == -1) { it325_idsegmesproy = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, (int)dr["t305_idproyectosubnodo"], iAnomes); if (it325_idsegmesproy == 0) { sEstadoMes = SEGMESPROYECTOSUBNODO.EstadoMesACrear(tr, (int)dr["t305_idproyectosubnodo"], iAnomes); it325_idsegmesproy = SEGMESPROYECTOSUBNODO.Insert(tr, (int)dr["t305_idproyectosubnodo"], iAnomes, sEstadoMes, 0, 0, false, 0, 0); } if ((bool)dr["t445_grupo"]) { //if ((bool)dr["t445_ute"]) iClaseEco = Constantes.IngExtServProf; //else iClaseEco = Constantes.IngExtServProfGrupo; iClaseEco = Constantes.IngExtServProfGrupo; } else { iClaseEco = Constantes.IngExtServProf; } DATOECO.InsertFactura(tr, it325_idsegmesproy, iClaseEco, dr["t445_descri"].ToString(), decimal.Parse(dr["t445_imp_fact"].ToString()), null, null, DateTime.Parse(dr["t445_fec_fact"].ToString()), dr["t445_serie"].ToString(), int.Parse(dr["t445_numero"].ToString()), int.Parse(dr["t313_idempresa"].ToString()), int.Parse(dr["t302_idcliente"].ToString()), Constantes.FicheroFacturasSAP, dr["t445_refcliente"].ToString()); INTERFACTSAP.Delete(tr, (int)dr["t445_id"]); if (dr["t301_estado"].ToString() == "P") { ponerProyPP(int.Parse(dr["t301_idproyecto"].ToString()).ToString("#,###"), slProyPP); } } iNumLin++; } dr.Close(); dr.Dispose(); Conexion.CommitTransaccion(tr); //sResul = "OK@#@"; //sResul = ObtenerTiposAsunto("3", "0"); //genero cadena con los proyectos en estado Presupuestado foreach (string sProy in slProyPP) { sResul += sProy + "##"; } sResul += "@#@" + cabErrores() + "</table>@#@" + INTERFACTSAP.numFacturas(null).ToString("#,##0"); } catch (Exception ex) { Conexion.CerrarTransaccion(tr); sResul = "Error@#@" + Errores.mostrarError("Error al procesar", ex); } finally { Conexion.Cerrar(oConn); } return(sResul); }