Example #1
0
        private void cancellaScritture()
        {
            EP_functions EP = new EP_functions(Meta.Dispatcher);

            if (!EP.attivo)
            {
                return;
            }
            EP.GetEntryForDocument(idrelated);

            foreach (DataRow rEntry in EP.D.Tables["entry"].Rows)
            {
                rEntry.Delete();
            }

            foreach (DataRow rEntryDetail in EP.D.Tables["entrydetail"].Rows)
            {
                rEntryDetail.Delete();
            }

            MetaData MetaEntry = MetaData.GetMetaData(this, "entry");
            PostData Post      = MetaEntry.Get_PostData();

            Post.InitClass(EP.D, Meta.Conn);
            if (!Post.DO_POST())
            {
                MessageBox.Show(this, "Errore durante la cancellazione delle scritture in PD");
            }
        }
Example #2
0
        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;
            }
        }
Example #3
0
        void EditEntry()
        {
            if (DS.mainivapay.Rows.Count == 0)
            {
                return;
            }
            EP_functions EP = new EP_functions(Meta.Dispatcher);

            EP.EditRelatedEntry(Meta, DS.mainivapay.Rows[0]);
        }
Example #4
0
 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;
     }
 }
Example #5
0
        void EditEntry(DataRow Curr)
        {
            if (DS.pettycashoperation.Rows.Count == 0)
            {
                return;
            }
            EP_functions EP = new EP_functions(Meta.Dispatcher);

            EP.EditRelatedEntry(Meta, Curr);
        }
Example #6
0
        void EditEntry(DataRow rCedolino)
        {
            if (rCedolino == null)
            {
                return;
            }
            EP_functions EP = new EP_functions(Meta.Dispatcher);

            EP.EditRelatedEntry(Meta, rCedolino);
        }
Example #7
0
        void EditEntry(EP_functions EP, DataRow rDetail)
        {
            DataTable storeunloaddetail = Conn.CreateTableByName("storeunloaddetail", "*");
            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.EditRelatedEntry(Meta, rStoreunloaddetail);
        }
Example #8
0
        private void btnLinkEpExp_Click(object sender, EventArgs e)
        {
            if (Meta.IsEmpty)
            {
                return;
            }
            DataRow curr = DS.csa_contracttaxepexp.Rows[0];

            MetaData.GetFormData(this, true);
            EP_functions ep     = new EP_functions(Meta.Dispatcher);
            object       nphase = cmbFaseImpBudget.SelectedValue; // Impegno
            string       filter = QHS.CmpEq("ayear", Meta.GetSys("esercizio"));
            int          yepexp = CfgFn.GetNoNullInt32(txtEsercizioImpegno.Text.Trim());

            if (yepexp != 0)
            {
                filter = QHS.CmpEq("yepexp", yepexp);
            }
            else
            {
                filter = QHS.CmpEq("ayear", Meta.GetSys("esercizio"));
            }
            int nepexp = CfgFn.GetNoNullInt32(txtNumImpegno.Text.Trim());

            if (nepexp != 0)
            {
                filter = QHS.AppAnd(filter, QHS.CmpEq("nepexp", nepexp));
            }
            string filter_fase = "";

            if (CfgFn.GetNoNullInt32(nphase) == 0)
            {
                filter_fase = QHS.AppOr(QHS.DoPar(QHS.CmpEq("nphase", 1)),
                                        QHS.DoPar(QHS.CmpEq("nphase", 2)));
            }
            if ((CfgFn.GetNoNullInt32(nphase) == 1) || (CfgFn.GetNoNullInt32(nphase) == 2))
            {
                filter_fase = QHS.CmpEq("nphase", nphase);
            }
            filter = QHS.AppAnd(filter, filter_fase);
            String fAmount = QHS.CmpGt("(totcurramount - isnull(totalcost,0))", 0); // condizione sul disponibile

            filter = QHS.AppAnd(filter, fAmount);

            string VistaScelta = "epexpview";

            MetaData mepexp = Meta.Dispatcher.Get(VistaScelta);

            mepexp.FilterLocked = true;
            mepexp.DS           = DS;
            DataRow myDr = mepexp.SelectOne("default", filter, null, null);

            if (myDr != null)
            {
                curr["idepexp"]                = myDr["idepexp"];
                txtEsercizioImpegno.Text       = myDr["yepexp"].ToString();
                txtNumImpegno.Text             = myDr["nepexp"].ToString();
                cmbFaseImpBudget.SelectedValue = myDr["nphase"];
                Meta.FreshForm();
            }
        }
Example #9
0
        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);
        }
Example #10
0
        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);
                }
            }
        }
Example #11
0
        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);
                }
            }
        }
Example #12
0
        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);
        }
Example #13
0
        // 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);
            }
        }