Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
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);
            }
        }