//protected override DataRow fillEntryDetail(DataTable tEntryDetail, DataRow rEntry, object idacc, decimal amount) { // DataRow rEntryDetail = fillEntryDetail(tEntryDetail, rEntry, idacc, null, null, amount); // return rEntryDetail; //} bool doRipartisciRisultato() { //eventuali controlli di applicabilità if (!doVerifyRiserve()) { return(false); } DataTable tEntry = DataAccess.CreateTableByName(Meta.Conn, "entry", "*"); DataTable tEntryDetail = DataAccess.CreateTableByName(Meta.Conn, "entrydetail", "*"); DataSet ds = new DataSet(); ds.Tables.Add(tEntry); metaEntry.SetDefaults(tEntry); ds.Tables.Add(tEntryDetail); metaEntryDetail.SetDefaults(tEntryDetail); RowChange.SetOptimized(tEntry, true); RowChange.ClearMaxCache(tEntry); RowChange.SetOptimized(tEntryDetail, true); RowChange.ClearMaxCache(tEntryDetail); ds.Relations.Add(new DataRelation("x", new [] { tEntry.Columns["yentry"], tEntry.Columns["nentry"] }, new [] { tEntryDetail.Columns["yentry"], tEntryDetail.Columns["nentry"] }, false )); string query = "select U.idupb,U.codeupb, U.title as upb, sum(amount) as amount from entrydetail ED " + " LEFT OUTER JOIN UPB U ON ED.idupb=U.idupb " + " WHERE " + QHS.AppAnd(QHS.CmpEq("ED.yentry", esercizio), QHS.CmpEq("idacc", idacc_risultatoesercizio)) + " group by U.idupb,U.codeupb, U.title " + " having sum(amount)<>0 "; DataTable t = Conn.SQLRunner(query); if (t == null) { MessageBox.Show(this, "Errore nella query che estrae i risultati da ripartire", "Errore"); return(false); } if (t.Rows.Count == 0) { MessageBox.Show(this, "Nessun risultato economico da ripartire", "Avvertimento"); return(true); } DataRow rEntry = getEntryRibaltamento(tEntry); if (rEntry == null) { MessageBox.Show(this, "Errore nella creazione della scrittura", "Errore"); return(false); } foreach (DataRow r in t.Rows) { if (!calcolaDettaglioRibaltamento(tEntryDetail, rEntry, r)) { return(false); } } FrmEntryPreSave frm = new FrmEntryPreSave(ds.Tables["entrydetail"], Meta.Conn, t); DialogResult dr = frm.ShowDialog(); if (dr != DialogResult.OK) { MessageBox.Show(this, "Operazione Annullata!"); return(true); } PostData post = metaEntry.Get_PostData(); post.InitClass(ds, Meta.Conn); if (post.DO_POST()) { DataRow rEntryPosted = tEntry.Rows[0]; EditEntry(rEntryPosted); MessageBox.Show(this, "Ripartimento del risultato economico completato con successo!"); } else { MessageBox.Show(this, "Errore nel salvataggio della scrittura di ripartimento", "Errore"); return(false); } return(true); }
/* * Estrae tutti i dettagli scrittura associati allo stato patrimoniale, della scrittura di epilogo dell'anno precedente. * TODO * Deve fare questo calcolo distinguendo per idupb, idreg */ private bool doApertura() { if (!doVerify()) { return(false); } DataTable tEntry = DataAccess.CreateTableByName(Meta.Conn, "entry", "*"); DataTable tEntryDetail = DataAccess.CreateTableByName(Meta.Conn, "entrydetail", "*"); DataSet ds = new DataSet(); ds.Tables.Add(tEntry); metaEntry.SetDefaults(tEntry); ds.Tables.Add(tEntryDetail); metaEntryDetail.SetDefaults(tEntryDetail); tEntry.setOptimized(true); RowChange.ClearMaxCache(tEntry); tEntryDetail.setOptimized(true); RowChange.ClearMaxCache(tEntryDetail); ds.Relations.Add(new DataRelation("x", new[] { tEntry.Columns["yentry"], tEntry.Columns["nentry"] }, new[] { tEntryDetail.Columns["yentry"], tEntryDetail.Columns["nentry"] }, false )); int lastEsercizio = esercizio - 1; string query = "SELECT ED.amount, ACC.codeacc as olcodeacc, LKP.newidacc as idacc, LKACC.codeacc, LKACC.title as account," + " ED.idupb, UPB.codeupb , UPB.title as upb, " + " ED.idreg, REGISTRY.title as registry, " + " ED.competencystart, ED.competencystop, " + " ED.idaccmotive, ACCMOTIVE.codemotive, ACCMOTIVE.title as accmotive,ED.idepexp,ED.idepacc " + " FROM entrydetail ED " + " JOIN entry E " + " ON E.yentry = ED.yentry AND E.nentry = ED.nentry " + " LEFT OUTER JOIN accountlookup LKP " + " ON " + QHS.CmpEq("ED.idacc", QHS.Field("LKP.oldidacc")) + " LEFT OUTER JOIN account LKACC " + " ON " + QHS.CmpEq("LKP.newidacc", QHS.Field("LKACC.idacc")) + " JOIN account ACC " + " ON " + QHS.CmpEq("ED.idacc", QHS.Field("ACC.idacc")) + " LEFT OUTER JOIN UPB " + " ON " + QHS.CmpEq("ED.idupb", QHS.Field("UPB.idupb")) + " LEFT OUTER JOIN REGISTRY " + " ON " + QHS.CmpEq("ED.idreg", QHS.Field("REGISTRY.idreg")) + " LEFT OUTER JOIN ACCMOTIVE " + " ON " + QHS.CmpEq("ED.idaccmotive", QHS.Field("ACCMOTIVE.idaccmotive")) + " WHERE " + QHS.AppAnd(QHS.CmpEq("ED.yentry", lastEsercizio), QHS.CmpEq("ACC.ayear", lastEsercizio), QHS.CmpEq("E.identrykind", 12) , QHS.IsNotNull("ACC.idpatrimony") // non saltiamo nulla e ribaltiamo semplicemente tutti i conti attualizzandoli nell'anno successivo ); DataTable tSaldo = Meta.Conn.SQLRunner(query); if (tSaldo == null) { MessageBox.Show(this, "Errore nella query che estrae i conti da aprire", "Errore"); return(false); } if (tSaldo.Rows.Count == 0) { MessageBox.Show(this, "La tabella dei saldi risulta vuota, procedura di apertura non eseguita", "Avvertimento"); return(true); } DataRow rEntry = fillEntryApertura(tEntry); if (rEntry == null) { MessageBox.Show(this, "Errore nella creazione della scrittura", "Errore"); return(false); } //decimal sumSP = 0; //bool addedSP = false; string f = QHS.CmpEq("ayear", esercizio); object idaccPat = Meta.Conn.DO_READ_VALUE("config", f, "idacc_patrimony"); if ((idaccPat == null) || (idaccPat == DBNull.Value)) { MessageBox.Show(this, "Non è stato selezionato il conto che pareggia l'epilogo dei conti patrimoniali", "Errore"); return(false); } foreach (DataRow rSaldo in tSaldo.Rows) { //if (!addedSP) addedSP = true; //sumSP += CfgFn.GetNoNullDecimal(rSaldo["amount"]); if (!calcolaDettaglioApertura(tEntryDetail, rEntry, rSaldo, idaccPat)) { return(false); } } FrmEntryPreSave frm = new FrmEntryPreSave(ds.Tables["entrydetail"], Meta.Conn, tSaldo); DialogResult dr = frm.ShowDialog(); if (dr != DialogResult.OK) { MessageBox.Show(this, "Operazione Annullata!"); return(true); } MetaData MetaEntry = MetaData.GetMetaData(this, "entry"); var Post = new Easy_PostData_NoBL(); Post.InitClass(ds, Meta.Conn); if (Post.DO_POST()) { DataRow rEntryPosted = tEntry.Rows[0]; EditEntry(rEntryPosted); MessageBox.Show(this, "Apertura dei conti effettuata"); } else { MessageBox.Show(this, "Errore nel salvataggio della scrittura di apertura!", "Errore"); return(false); } return(true); }