public void GeneraScritture(string elencoCedolini) { if (elencoCedolini == "") { return; } DataAccess Conn = Meta.Conn; int esercizio = Conn.GetEsercizio(); DataTable tCedolino = DataAccess.CreateTableByName(Meta.Conn, "payroll", "*"); DataTable tContratto = DataAccess.CreateTableByName(Meta.Conn, "parasubcontract", "*"); DataTable tCedolinoRitenuta = DataAccess.CreateTableByName(Meta.Conn, "payrolltax", "*"); DataTable tTipoRitenuta = DataAccess.CreateTableByName(Meta.Conn, "tax", "*"); string filtroCedolini = QHS.FieldInList("idpayroll", elencoCedolini); DataAccess.RUN_SELECT_INTO_TABLE(Meta.Conn, tTipoRitenuta, null, null, null, true); DataAccess.RUN_SELECT_INTO_TABLE(Meta.Conn, tCedolino, null, filtroCedolini, null, true); DataAccess.RUN_SELECT_INTO_TABLE(Meta.Conn, tCedolinoRitenuta, null, filtroCedolini, null, true); string elencoContratti = QHS.FieldInList("idcon", QueryCreator.ColumnValues(tCedolino, null, "idcon", true)); DataAccess.RUN_SELECT_INTO_TABLE(Meta.Conn, tContratto, null, elencoContratti, null, true); string flagEpExp = Conn.DO_READ_VALUE("config", QHS.CmpEq("ayear", Conn.GetEsercizio()), "flagepexp").ToString().ToUpper(); // L'anagrafica usata per la parte verso ente è quella della cfg. ritenute, eventualmente spacchettata // ove ci sia la ripartizione percentuale (in questo caso sarebbe opportuno usare la liq. diretta) //Invece l'anagrafica per la parte "conto ente" è quella della cfg. delle partite di giro object idregauto = Conn.DO_READ_VALUE("config", QHS.CmpEq("ayear", Conn.GetSys("esercizio")), "idregauto"); TaxEntryHelper TEH = new TaxEntryHelper(Conn); foreach (DataRow CurrCedolino in tCedolino.Rows) { DataRow CurrContratto = tContratto.Select(QHC.CmpEq("idcon", CurrCedolino["idcon"]))[0]; object idreg = CurrContratto["idreg"]; object idupb = CurrContratto["idupb"]; EP_functions EP = new EP_functions(Meta.Dispatcher); if (!EP.attivo) { return; } EP.GetEntryForDocument(CurrCedolino); object descr = "Contratto n." + CurrContratto["ncon"].ToString() + " del " + CurrContratto["ycon"].ToString() + " - " + "Cedolino n. " + CurrCedolino["fiscalyear"] + "/" + CurrCedolino["npayroll"]; object doc = "Contr. " + CurrContratto["ncon"].ToString() + "/" + CurrContratto["ycon"].ToString() + " Cedolino " + CurrCedolino["npayroll"] + "/" + CurrCedolino["fiscalyear"]; DataRow mainEntry = EP.SetEntry(descr, Meta.GetSys("datacontabile"), doc, Meta.GetSys("datacontabile"), EP_functions.GetIdForDocument(CurrCedolino)); EP.ClearDetails(mainEntry); object idaccmot_main = CurrContratto["idaccmotive"]; if (idaccmot_main == DBNull.Value) { MessageBox.Show("Non è stata impostata la causale per la prestazione."); return; } string idepcontext = "PRESTAZ"; object idacc_registry = EP.GetSupplierAccountForRegistry( CurrContratto["idaccmotivedebit"], CurrContratto["idreg"]); if (idacc_registry == null || idacc_registry == DBNull.Value) { MessageBox.Show("Non è stato configurato il conto di debito/credito opportuno"); return; } decimal totale = CfgFn.GetNoNullDecimal(CurrCedolino["feegross"]); string idrelated = BudgetFunction.GetIdForDocument(CurrCedolino); object idepexp = Conn.DO_READ_VALUE("epexp", QHS.AppAnd(QHS.CmpEq("idrelated", idrelated), QHS.CmpEq("nphase", 2)), "idepexp"); if ((idepexp == null || idepexp == DBNull.Value) && flagEpExp == "S" && esercizio > 2015) { MessageBox.Show("Errore", "Non è stato trovato alcun impegno di budget per il contratto"); return; } decimal contributiNonConfigurati = 0; //Per tutti i CONTRIBUTI: //Se è configurato il conto di debito // effettua la scrittura COSTO->debito conto ente (idaccmotive_cost -> idaccmotive_debit) // altrimenti // effettua la scrittura COSTO->debito verso ente (idaccmotive_cost -> idaccmotive_pay) foreach (DataRow Rit in tCedolinoRitenuta.Rows) { decimal amount = CfgFn.GetNoNullDecimal(Rit["admintax"]); if (amount == 0) { continue; } string filtroRit = QHC.CmpEq("taxcode", Rit["taxcode"]); DataRow TipoRit = tTipoRitenuta.Select(filtroRit)[0]; if (TipoRit == null) { continue; } //Se la causale di costo non è configurata, prende la causale principale object idaccmotive_cost = idaccmot_main; if (TipoRit["idaccmotive_cost"] != DBNull.Value) { idaccmotive_cost = TipoRit["idaccmotive_cost"]; } if (idaccmotive_cost == idaccmot_main) { idaccmotive_cost = DBNull.Value; } object idaccmotive_touse = DBNull.Value; bool debitoCONTOerario = false; if (TipoRit["idaccmotive_debit"] != DBNull.Value) { idaccmotive_touse = TipoRit["idaccmotive_debit"];//debito CONTO erario debitoCONTOerario = true; } else { idaccmotive_touse = TipoRit["idaccmotive_pay"];//debito VERSO erario } if (idaccmotive_touse == DBNull.Value) { MessageBox.Show("Il contributo " + TipoRit["description"].ToString() + " non è correttamente configurato per l'E/P"); return; //Errore fatale! } if (idaccmotive_cost == DBNull.Value) { contributiNonConfigurati += amount; } else { string idrelatedContrib = BudgetFunction.GetIdForDocument(Rit); object idepexpContrib = Conn.DO_READ_VALUE("epexp", QHS.AppAnd(QHS.CmpEq("idrelated", idrelatedContrib), QHS.CmpEq("nphase", 2)), "idepexp"); if ((idepexpContrib == null || idepexpContrib == DBNull.Value) && flagEpExp == "S" && esercizio > 2015) { MessageBox.Show("Errore", "Non è stato trovato alcun impegno di budget per il contributo" + Rit["taxcode"].ToString()); return; } DataRow[] ContiContribCosto = EP.GetAccMotiveDetails(idaccmotive_cost.ToString()); foreach (DataRow CP in ContiContribCosto) { EP.EffettuaScritturaImpegnoBudget(idepcontext, amount, CP["idacc"], idreg, idupb, CurrCedolino["start"], CurrCedolino["stop"], CurrCedolino, idaccmotive_cost, idepexpContrib, null, idrelatedContrib); } } //Fa la scrittura sul conto di debito conto/verso erario usando la tabella anagrafiche della cfg ritenute DataRow[] ContiContribFinanz = EP.GetAccMotiveDetails(idaccmotive_touse.ToString()); if (debitoCONTOerario) { foreach (DataRow CP in ContiContribFinanz) { EP.EffettuaScrittura(idepcontext, amount, CP["idacc"], idregauto, idupb, //era Curr["idreg"] CurrCedolino["start"], CurrCedolino["stop"], CurrCedolino, idaccmotive_touse); } } else { DataTable Regs = TEH.GetIdRegFor(Rit["taxcode"], DBNull.Value, DBNull.Value); if (Regs == null || Regs.Rows.Count == 0) { MessageBox.Show("Anagrafica per il versamento non trovata per la ritenuta di tipo " + Rit["taxref"].ToString(), "Errore"); } else { foreach (DataRow Registry in Regs.Rows) { decimal amount_to_consider = amount * CfgFn.GetNoNullDecimal(Registry["quota"]); int idreg_to_consider = CfgFn.GetNoNullInt32(Registry["idreg"]); foreach (DataRow CP in ContiContribFinanz) { EP.EffettuaScrittura(idepcontext, amount_to_consider, CP["idacc"], idreg_to_consider, idupb, //era Curr["idreg"] CurrCedolino["start"], CurrCedolino["stop"], CurrCedolino, idaccmotive_touse); } } } } } //Effettua la scrittura sulla causale principale DataRow[] ContiPrinc = EP.GetAccMotiveDetails(idaccmot_main); foreach (DataRow CP in ContiPrinc) { EP.EffettuaScritturaImpegnoBudget(idepcontext, totale + contributiNonConfigurati, CP["idacc"], idreg, idupb, CurrCedolino["start"], CurrCedolino["stop"], CurrCedolino, idaccmot_main, idepexp, null, idrelated); } //Effettua la scrittura sul conto di debito vs fornitore EP.EffettuaScrittura(idepcontext, totale, idacc_registry, idreg, idupb, CurrCedolino["start"], CurrCedolino["stop"], CurrCedolino, idaccmot_main); EP.RemoveEmptyDetails(); MetaData MetaEntry = Meta.Dispatcher.Get("entry"); PostData Post = MetaEntry.Get_PostData(); Post.InitClass(EP.D, Meta.Conn); if (Post.DO_POST()) { EditEntry(CurrCedolino); } else { EP.viewDetails(Meta); } } }
void GeneraScritture() { if (DS.pettycashoperation.Rows.Count == 0) { return; //It was an insert-cancel } DataRow rPettycashoperation = DS.pettycashoperation.Rows[0]; // Prendo la Rows[0] perchè alcune info sono in comune alle n-pettycashoperation, quindi evito di mostrare i messaggi all'utente n volte. object idpettycash = rPettycashoperation["idpettycash"]; string filterpcash = "(idpettycash=" + QueryCreator.quotedstrvalue(idpettycash, false) + ")"; DataRow[] PettyCash = DS.pettycashsetup.Select(filterpcash); if (PettyCash.Length == 0) { MessageBox.Show("Non è stata inserita la configuraz. del fondo economale per quest'anno"); return; } DataRow rPettyCash = PettyCash[0]; object idacc_pettycash = rPettyCash["idacc"]; object idreg = rPettycashoperation["idreg"]; object idpettycashreg = rPettyCash["registrymanager"]; EP_functions EP = new EP_functions(Meta.Dispatcher); if (!EP.attivo) { return; } object idaccmot_debit = rPettycashoperation["idaccmotive_debit"]; object idacc_registry = EP.GetSupplierAccountForRegistry(null, idreg); if (idacc_registry == null || idacc_registry.ToString() == "") { MessageBox.Show("Non è stato configurato il conto di debito/credito opportuno"); return; } if (idaccmot_debit == DBNull.Value) { MessageBox.Show("Non è stata impostata la causale di debito. Sarà usata una causale di debito standard."); } foreach (DataRow Curr in DS.pettycashoperation.Rows) { EP.GetEntryForDocument(Curr); object doc = "Op. Fondo Econ. " + Curr["idpettycash"].ToString() + "/" + Curr["yoperation"].ToString().Substring(2, 2) + "/" + Curr["noperation"].ToString().PadLeft(6, '0'); EP.SetEntry(Curr["description"], Curr["adate"], doc, Curr["adate"], EP_functions.GetIdForDocument(Curr)); EP.ClearDetails(); string idepcontext_debito = "PSPESED"; decimal importo = CfgFn.GetNoNullDecimal(Curr["amount"]); //Scrittura : DEBITO A F.ECONOMALE contesto PSPESED (P.SPESE DEBITO) object idacc_debit = idacc_registry; if (idaccmot_debit != DBNull.Value) { DataRow[] ContiDebito = EP.GetAccMotiveDetails(idaccmot_debit.ToString()); if (ContiDebito.Length > 0) { idacc_debit = ContiDebito[0]["idacc"]; } } EP.EffettuaScrittura(idepcontext_debito, importo, idacc_debit.ToString(), idreg, Curr["idupb"], Curr["start"], Curr["stop"], Curr, idaccmot_debit); EP.EffettuaScrittura(idepcontext_debito, importo, idacc_pettycash.ToString(), idpettycashreg, Curr["idupb"], Curr["start"], Curr["stop"], Curr, idaccmot_debit); EP.RemoveEmptyDetails(); MetaData MetaEntry = MetaData.GetMetaData(this, "entry"); PostData Post = MetaEntry.Get_PostData(); Post.InitClass(EP.D, Meta.Conn); if (Post.DO_POST()) { EditEntry(Curr); } else { EP.viewDetails(Meta); } } }
bool GeneraScritture() { if (MessageBox.Show("Si vuole procedere alla generazione delle scritture in partita doppia ?", "Avviso", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return(false); } DataTable storeunloaddetail = Conn.CreateTableByName("storeunloaddetail", "*"); foreach (DataRow rDetail in Tinvoicedetail.Select()) { EP_functions EP = new EP_functions(Meta.Dispatcher); if (!EP.attivo) { return(false); } string filter = QHS.AppAnd(QHS.CmpEq("idstoreunload", rDetail["idstoreunload"]), QHS.CmpEq("idstoreunloaddetail", rDetail["idstoreunloaddetail"])); Conn.RUN_SELECT_INTO_TABLE(storeunloaddetail, null, filter, null, true); DataRow rStoreunloaddetail = storeunloaddetail.Select(filter)[0]; EP.GetEntryForDocument(rStoreunloaddetail); object doc = DBNull.Value; doc = "Scarico n. " + rDetail["nstoreunload"].ToString(); DataRow rr = EP.SetEntry(rDetail["description"], rDetail["adate"], doc, DBNull.Value, EP_functions.GetIdForDocument(rStoreunloaddetail)); EP.ClearDetails(rr); //--------------------------------------------------------------------------------------------------- object idreg = rDetail["idreg"]; object idreg_iva = idreg; object esercizio = Meta.GetSys("esercizio"); DataRow currInvSetup = DS.config.Rows[0]; object idregVersamento12 = currInvSetup["paymentagency12"]; object idregRimborso12 = currInvSetup["refundagency12"]; object idacc_refund12 = EP.GetAccountForIvaRefund12(); object idacc_payment12 = EP.GetAccountForIvaPayment12(); bool istituzionale = (CfgFn.GetNoNullInt32(rDetail["TipoAttivita"]) == 1); bool deferred = (rDetail["flagdeferred"].ToString().ToUpper() == "S"); bool isIntraCom = (rDetail["flagintracom"].ToString().ToUpper() != "N");// Flagintracom può valere: S-intracom, N o X-extracom. bool INVERTI_DEBITO_CREDITO = (istituzionale && isIntraCom); string filtroInvKind = QHS.CmpEq("idinvkind", rDetail["idinvkind"]); DataTable Tinvoicekind = Conn.RUN_SELECT("invoicekind", "*", null, filtroInvKind, null, true); DataRow TipoDoc = Tinvoicekind.Rows[0]; filtroInvKind = QHS.AppAnd(QHS.CmpEq("ayear", Meta.GetSys("esercizio")), filtroInvKind); DataTable Tinvoicekindyear = Conn.RUN_SELECT("invoicekindyear", "*", null, filtroInvKind, null, true); DataRow TipoDocYear = Tinvoicekindyear.Rows[0]; object invkind_idacc_iva = DBNull.Value; object invkind_idacc_iva_intracom = DBNull.Value; object idacc_unabatable = DBNull.Value; //costo iva indetraibile (per chi calcola riga per riga e gestisce tale conto) if (isIntraCom) { idacc_unabatable = TipoDocYear["idacc_unabatable_intra"]; } if (!isIntraCom || idacc_unabatable == DBNull.Value) { idacc_unabatable = TipoDocYear["idacc_unabatable"]; } //conto per l'iva if (deferred) { invkind_idacc_iva = (TipoDocYear["idacc_deferred"] != DBNull.Value) ? TipoDocYear["idacc_deferred"] : TipoDocYear["idacc"]; } else { invkind_idacc_iva = TipoDocYear["idacc"]; } //conto per l'iva di segno opposto per fatture intracom. if (isIntraCom) { if (deferred) { invkind_idacc_iva_intracom = (TipoDocYear["idacc_deferred_intra"] != DBNull.Value) ? TipoDocYear["idacc_deferred_intra"] : TipoDocYear["idacc_intra"]; } else { invkind_idacc_iva_intracom = TipoDocYear["idacc_intra"]; } } //Per le fatture istituzionali non intracom ignora l'iva detraibileSara if (istituzionale && !isIntraCom) { invkind_idacc_iva = DBNull.Value; } object invkind_idacc_discount = TipoDocYear["idacc_discount"]; byte flag = CfgFn.GetNoNullByte(TipoDoc["flag"]); string idepcontext; idepcontext = "FATACQ"; if (isIntraCom && istituzionale) { object idacc_ivapay = DBNull.Value; idreg_iva = idregVersamento12; idacc_ivapay = idacc_payment12; if (invkind_idacc_iva == DBNull.Value) { invkind_idacc_iva = idacc_ivapay; } } string filterEsercizio = QHC.CmpEq("ayear", Meta.GetSys("esercizio")); string filterkind = QHC.CmpEq("idinvkind", rDetail["idinvkind"]); DataRow rInvoiceKind = Tinvoicekind.Rows[0];// è lo stesso di sopra double abatablerate = CfgFn.GetNoNullDouble( Meta.Conn.DO_READ_VALUE("invoicekindyearview", GetData.MergeFilters(filterkind, filterEsercizio) , "abatablerate")); double tassocambio = CfgFn.GetNoNullDouble(CfgFn.GetNoNullDouble(rDetail["exchangerate"])); double R_imponibile = CfgFn.GetNoNullDouble(rDetail["taxable"]); double iva = CfgFn.GetNoNullDouble(rDetail["tax"]); double quantita = CfgFn.GetNoNullDouble(rDetail["number"]); double imponibileD = CfgFn.RoundValuta(R_imponibile * quantita * tassocambio); decimal imponibile = Convert.ToDecimal(imponibileD); double ivaindetraibile = 0; double ivadetraibilelorda = 0; double ivadetraibile = 0; if (istituzionale) { ivaindetraibile = CfgFn.RoundValuta(iva); ivadetraibile = 0; } else { ivaindetraibile = CfgFn.GetNoNullDouble(rDetail["unabatable"]); ivadetraibilelorda = CfgFn.RoundValuta((iva - ivaindetraibile)); ivadetraibile = CfgFn.RoundValuta(ivadetraibilelorda * abatablerate); } decimal valore_iva_totale = CfgFn.GetNoNullDecimal(rDetail["tax"]); //iva = iva detraibile, da movimentarsi con il conto normale dell'iva (acq/vendite) decimal valore_iva_detraibile = CfgFn.GetNoNullDecimal(ivadetraibile); decimal iva_indetraibile = valore_iva_totale - valore_iva_detraibile; // valore_costo = da usare unitamente al conto di costo // è pari all'imponibile + iva indetraibile ove il conto dell'iva indetraibile non sia configurato decimal valore_costo = CfgFn.GetNoNullDecimal(imponibile); if (idacc_unabatable == DBNull.Value) { valore_costo += iva_indetraibile; } if (invkind_idacc_iva == DBNull.Value && valore_iva_detraibile > 0) { string tipo = deferred ? "differita" : "immediata"; //////MessageBox.Show("Non è stata trovato il conto per l'iva " + tipo + " per il tipo documento " + ////// rDetail["idinvkind"].ToString()); valore_costo = valore_costo + valore_iva_detraibile; valore_iva_detraibile = 0; //return; } if (invkind_idacc_iva == DBNull.Value && isIntraCom && istituzionale && iva_indetraibile > 0) { //////MessageBox.Show("Non è stata trovato il conto per l'iva per il tipo documento " + ////// rDetail["idinvkind"].ToString()); iva_indetraibile = 0; } object idaccmotive = rDetail["idaccmotive"]; if (idaccmotive == DBNull.Value) { //////MessageBox.Show("Attenzione, il dettaglio " + rDetail["detaildescription"].ToString() + ////// " non ha la causale!"); continue; } object idaccmotive_main_debit = rDetail["idaccmotivedebit"]; if (idaccmotive_main_debit == DBNull.Value) { idaccmotive_main_debit = idaccmotive; } DataRow[] REntries = EP.GetAccMotiveDetails(idaccmotive); if (REntries.Length == 0) { //////MessageBox.Show("Non è stato configurata la causale di costo del dettaglio n." + ////// rDetail["rownum"].ToString() + ". La scrittura non pareggerà.", "Errore"); } //scrittura sul costo iva indetraibile (solo per gli acquisti ove conto configurato) // COSTO NUOVO if (idacc_unabatable != DBNull.Value && iva_indetraibile > 0) { EP.EffettuaScrittura(idepcontext, iva_indetraibile, idacc_unabatable, idreg, rDetail["idupb"], rDetail["competencystart"], rDetail["competencystop"], rDetail, idaccmotive); } //scrittura su costo/ricavo (eventualmente include iva indetraibile) foreach (DataRow RE in REntries) { EP.EffettuaScrittura(idepcontext, valore_costo, RE["idacc"], idreg, rDetail["idupb"], rDetail["competencystart"], rDetail["competencystop"], rDetail, idaccmotive); } // A COSTO VECCHIO sulle vecchie coordiante ToldIdsor.Clear(); DataRow Roldidsor = DS.Tables["ToldIdsor"].NewRow(); Roldidsor["idsor1"] = rDetail["invidsor1"]; Roldidsor["idsor2"] = rDetail["invidsor2"]; Roldidsor["idsor3"] = rDetail["invidsor3"]; DS.Tables["ToldIdsor"].Rows.Add(Roldidsor); if (idacc_unabatable != DBNull.Value && iva_indetraibile > 0) { EP.EffettuaScrittura(idepcontext, -iva_indetraibile, idacc_unabatable, idreg, rDetail["idupb"], rDetail["competencystart"], rDetail["competencystop"], Roldidsor, idaccmotive); } //scrittura su costo/ricavo (eventualmente include iva indetraibile) foreach (DataRow RE in REntries) { EP.EffettuaScrittura(idepcontext, -valore_costo, RE["idacc"], idreg, rDetail["idupb"], rDetail["competencystart"], rDetail["competencystop"], Roldidsor, idaccmotive); } //--------------------------------------------------------------------------------------------------- EP.RemoveEmptyDetails(); MetaData MetaEntry = MetaData.GetMetaData(this, "entry"); PostData Post = MetaEntry.Get_PostData(); Post.InitClass(EP.D, Meta.Conn); if (Post.DO_POST()) { EditEntry(EP, rDetail); } } return(true); }