void VisualizzaEtichetteEP() { if (Meta.InsertMode || DS.mainivapay.Rows.Count == 0 || DS.config.Rows.Count == 0) { labEPnongenerato.Visible = false; labEPgenerato.Visible = false; btnVisualizzaEP.Visible = false; return; } string idrelated = EP_functions.GetIdForDocument(DS.mainivapay.Rows[0]); if (Meta.Conn.RUN_SELECT_COUNT("entry", QHS.CmpEq("idrelated", idrelated), true) == 0) { labEPnongenerato.Visible = true; labEPgenerato.Visible = false; btnVisualizzaEP.Visible = false; } else { labEPnongenerato.Visible = false; labEPgenerato.Visible = true; btnVisualizzaEP.Visible = true; } }
public void MetaData_BeforePost() { fromDelete = false; DS.dettliquidazioneivaview_debito.AcceptChanges(); if (DS.mainivapay.Rows[0].RowState == DataRowState.Deleted) { idrelated = EP_functions.GetIdForDocument(DS.mainivapay.Rows[0]); fromDelete = true; } }
public override bool IsValid(DataRow R, out string errmess, out string errfield) { if (!base.IsValid(R, out errmess, out errfield)) { return(false); } if (R["adate"] == DBNull.Value) { errmess = "La data registrazione è obbligatoria"; errfield = "adate"; return(false); } DateTime dd = (DateTime)R["adate"]; if (dd.Year != CfgFn.GetNoNullInt32(R["yinv"])) { errmess = "La data registrazione non è coerente con l'anno fattura"; errfield = "adate"; return(false); } if (CfgFn.GetNoNullInt32(R["ninv"]) <= 0) { errmess = "E' necessario specificare il numero documento"; errfield = "ninv"; return(false); } if (CfgFn.GetNoNullInt32(R["idreg"]) <= 0) { errmess = "Il campo 'Cliente/Fornitore' è obbligatorio"; errfield = "idreg"; return(false); } DataTable T = R.Table; string docautomatico = "N"; object idinvkind = R["idinvkind"]; int flag; string enable_fe = ""; if ((DS != null) && (DS.Tables.Contains("invoicekind"))) { DataTable InvKind = DS.Tables["invoicekind"]; DataRow[] invk = InvKind.Select(QHC.CmpEq("idinvkind", idinvkind)); flag = CfgFn.GetNoNullInt32(invk[0]["flag"]); enable_fe = invk[0]["enable_fe"].ToString().ToUpper(); } else { flag = CfgFn.GetNoNullInt32(Conn.readValue("invoicekind", q.eq("idinvkind", idinvkind), "flag")); enable_fe = Conn.readValue("invoicekind", q.eq("idinvkind", idinvkind), "flag").ToString().ToUpper(); } string myVeroTipoFattura = veroTipoFatturaAv(R["idinvkind"]); if ((myVeroTipoFattura != "A") && R["ipa_ven_cliente"] == DBNull.Value && R["email_ven_cliente"] == DBNull.Value && R["pec_ven_cliente"] == DBNull.Value && dd.Year > 2018) //vendita { errmess = "Per la fattura di vendita è sempre necessario valorizzare il Codice Univoco, oppure l'Email o la PEC del Destinatario, anche in caso di soggetto privato"; errfield = "ipa_ven_cliente"; return(false); } if (T.ExtendedProperties["docautomatico"] != null) { docautomatico = T.ExtendedProperties["docautomatico"].ToString().ToUpper(); } if (docautomatico != "S" && R["doc"].ToString() == "") { errmess = "Il campo 'Documento' è obbligatorio"; errfield = "doc"; return(false); } if (enable_fe == "N" && R["doc"].ToString().Length > 20) { errmess = "Per le fatture non elettroniche è necessario limitare la lunghezza del campo documento a 20 caratteri."; errfield = "doc"; return(false); } if (R["docdate"] == DBNull.Value) { errmess = "Il campo 'data documento' è obbligatorio"; errfield = "docdate"; return(false); } if (R["idcurrency"] == DBNull.Value) { errmess = "Il campo 'Valuta' è obbligatorio"; errfield = "idcurrency"; return(false); } if (R.RowState == DataRowState.Modified) { if (R["adate"].ToString() != R["adate", DataRowVersion.Original].ToString()) { string idrel = EP_functions.GetIdForDocument(R); if (Conn.RUN_SELECT_COUNT("entry", QHS.CmpEq("idrelated", idrel), false) > 0) { errmess = "La fattura ha già delle scritture collegate, occorre eliminarle prima di modificare " + "la data di registrazione"; errfield = "adate"; return(false); } } } if (isSSN(R["idinvkind"])) { if (R["ssntipospesa"] == DBNull.Value) { errmess = "Per il tipo fattura selezionata è necessario indicare il tipo spesa ai fini del progetto tessera sanitaria"; errfield = "ssntipospesa"; return(false); } } // Le Bollette doganali non hanno Scadenza if (R.Table.Columns.Contains("flagbit")) { object flagObj = R["flagbit"]; int flagInvoice = CfgFn.GetNoNullInt32(flagObj); bool isBolettaDoganale = (flagInvoice & 1) != 0; // Bit 0 bool isFattSpedizioniere = (flagInvoice & 2) != 0; // Bit 1 bool GeneraRecupero = (flagInvoice & 6) != 0; // Bit 6 if (isBolettaDoganale && (R["idexpirationkind"] != DBNull.Value)) { errmess = "Le Bollette doganali non hanno Scadenza"; errfield = "idexpirationkind"; return(false); } if (isBolettaDoganale && (R["touniqueregister"].ToString().ToUpper() == "S")) { errmess = "Le Bollette doganali non possono essere registrate nel registro unico"; errfield = "touniqueregister"; return(false); } if (isBolettaDoganale && (R["active"].ToString().ToUpper() == "S")) { errmess = "Le Bollette doganali non possono essere contabilizzate"; errfield = "active"; return(false); } if (isBolettaDoganale && (R["autoinvoice"].ToString().ToUpper() == "S")) { errmess = "Le Bollette doganali non possono essere autofatture"; errfield = "autoinvoice"; return(false); } if (isBolettaDoganale && (R["toincludeinpaymentindicator"].ToString().ToUpper() == "S")) { errmess = "Le Bollette doganali non vanno nell'indicatore di tempestività"; errfield = "toincludeinpaymentindicator"; return(false); } if (isBolettaDoganale && isFattSpedizioniere) { errmess = "Le Bollette doganali non sono fatt. spedizioniere"; errfield = "flagbit"; return(false); } if (isBolettaDoganale && (R["flag_auto_split_payment"].ToString().ToUpper() == "N")) { errmess = "Le Bollette doganali non possono essere modificate manualmente per lo split payment"; errfield = "flag_auto_split_payment"; return(false); } if (isBolettaDoganale && (R["flag_enable_split_payment"].ToString().ToUpper() == "S")) { errmess = "Le Bollette doganali non possono di tipo split payment"; errfield = "flag_enable_split_payment"; return(false); } if (GeneraRecupero && (R["flag_enable_split_payment"].ToString().ToUpper() == "S") && (R["flagintracom"].ToString().ToUpper() != "N")) { errmess = "Le Fatture INTRA o Extra-UE con generazione del recupero IVA estera non possono essere di tipo split payment"; errfield = "flag_enable_split_payment"; return(false); } } // 1 Data contabile = data registrazione if ((CfgFn.GetNoNullInt32(R["idexpirationkind"]) == 1) && (R["adate"] == DBNull.Value)) { errmess = "Avendo scelto il tipo scadenza: Data contabile, è obbligatorio indicare la data registrazione"; errfield = "adate"; return(false); } // 2 Data documento if ((CfgFn.GetNoNullInt32(R["idexpirationkind"]) == 2) && (R["docdate"] == DBNull.Value)) { errmess = "Avendo scelto il tipo scadenza: Data documento, è obbligatorio indicare la data documento"; errfield = "docdate"; return(false); } // 3 Fine mese data documento if ((CfgFn.GetNoNullInt32(R["idexpirationkind"]) == 3) && (R["docdate"] == DBNull.Value)) { errmess = "Avendo scelto il tipo scadenza: Fine mese data documento, è obbligatorio indicare la data documento"; errfield = "docdate"; return(false); } // 4 Fine mese data contabile if ((CfgFn.GetNoNullInt32(R["idexpirationkind"]) == 4) && (R["adate"] == DBNull.Value)) { errmess = "Avendo scelto il tipo scadenza: Fine mese data contabile, è obbligatorio indicare la data registrazione"; errfield = "adate"; return(false); } // 5 Pagamento Immediato if ((CfgFn.GetNoNullInt32(R["idexpirationkind"]) == 5) && (R["adate"] == DBNull.Value)) { errmess = "Avendo scelto il tipo scadenza: Pagamento immediato, è obbligatorio indicare la data registrazione"; errfield = "adate"; return(false); } // 6 Data ricezione if ((CfgFn.GetNoNullInt32(R["idexpirationkind"]) == 6) && (R["protocoldate"] == DBNull.Value)) { errmess = "Avendo scelto il tipo scadenza: Data ricezione, è obbligatorio indicare la data ricezione"; errfield = "protocoldate"; return(false); } if ((DS != null) && (DS.Tables.Contains("invoicedetail"))) { bool ExistsBeni = (DS.Tables["invoicedetail"].Select("intrastatoperationkind = 'B'").Length > 0); bool ExistsServizi = (DS.Tables["invoicedetail"].Select("intrastatoperationkind = 'S'").Length > 0); bool IntraInfoRequired = RegistryHasToDeclareIntrastat(R["idreg"]); if (R["flagintracom"].ToString().ToUpper() == "S" && IntraInfoRequired) { if (ExistsBeni) { if ((flag & 1) != 0) { //vendita if (R["iso_destination"] == DBNull.Value) { errmess = "Il campo 'paese di destinazione' è obbligatorio"; errfield = "iso_destination"; return(false); } if (R["idcountry_origin"] == DBNull.Value) { errmess = "Il campo 'provincia di origine' è obbligatorio"; errfield = "idcountry_origin"; return(false); } } else { //acquisto if (R["iso_origin"] == DBNull.Value) { errmess = "Il campo 'paese di origine' è obbligatorio"; errfield = "iso_origin"; return(false); } if (R["iso_provenance"] == DBNull.Value) { errmess = "Il campo 'paese di provenienza' è obbligatorio"; errfield = "iso_provenance"; return(false); } if (R["idcountry_destination"] == DBNull.Value) { errmess = "Il campo 'provincia destinazione' è obbligatorio"; errfield = "idcountry_destination"; return(false); } } if (R["idintrastatkind"] == DBNull.Value) { errmess = "Il campo 'natura della transazione' è obbligatorio"; errfield = "idintrastatkind"; return(false); } } if (ExistsServizi) { if (R["docdate"] == DBNull.Value) { errmess = "Il campo 'data' è obbligatorio"; errfield = "docdate"; return(false); } if (R["iso_payment"] == DBNull.Value) { errmess = "Il campo 'paese di pagamento' è obbligatorio"; errfield = "iso_payment"; return(false); } if (R["idintrastatpaymethod"] == DBNull.Value) { errmess = "Il campo 'Modalità di pagamento' è obbligatorio"; errfield = "idintrastatpaymethod"; return(false); } } } } return(true); }
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); } } }
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); } } }
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); }