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); }
// VISUALIZZA E BASTA void VisualizzaScritturedaGenerare(DataRow rDetail) { object idreg = rDetail["idreg"]; object idreg_iva = idreg; object esercizio = Meta.GetSys("esercizio"); if (rDetail["yinv"].ToString() != esercizio.ToString()) { return; } EP_functions EP = new EP_functions(Meta.Dispatcher); if (!EP.attivo) { return; } 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; } byte flag = CfgFn.GetNoNullByte(TipoDoc["flag"]); 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 = DS.invoicekind.Select(filterkind)[0]; 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"])); ////foreach (DataRow Rinvdet in DS.invoicedetail.Select()) ////{ 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"]); 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"; // I messaggi nella generazine delle scritture NON verranno visualizzati 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; } 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!"); return;//continue; Diventa un return perchè siamo già nel dettaglio } 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) if (idacc_unabatable != DBNull.Value && iva_indetraibile > 0) { // NON DEVE EFFETTUARE LA SCRITTURA MA DEVE INSERIRE LA RIGA NELLA TABELLA DataRow RigadaVisualizzare = DS.Tables["Info"].NewRow(); foreach (DataColumn C in Tinvoicedetail.Columns) { if (!DS.Tables["Info"].Columns.Contains(C.ColumnName)) { continue; } RigadaVisualizzare[C.ColumnName] = rDetail[C.ColumnName]; } RigadaVisualizzare["amount"] = iva_indetraibile; DS.Tables["Info"].Rows.Add(RigadaVisualizzare); } //scrittura su costo/ricavo (eventualmente include iva indetraibile) foreach (DataRow RE in REntries) { // NON DEVE EFFETTUARE LA SCRITTURA MA DEVE INSERIRE LA RIGA NELLA TABELLA DataRow RigadaVisualizzare = DS.Tables["Info"].NewRow(); foreach (DataColumn C in Tinvoicedetail.Columns) { if (!DS.Tables["Info"].Columns.Contains(C.ColumnName)) { continue; } RigadaVisualizzare[C.ColumnName] = rDetail[C.ColumnName]; } RigadaVisualizzare["amount"] = valore_costo; DS.Tables["Info"].Rows.Add(RigadaVisualizzare); } }