Пример #1
0
        //protected override DataRow fillEntryDetail(DataTable tEntryDetail, DataRow rEntry, object idacc, decimal amount) {
        //    DataRow rEntryDetail = fillEntryDetail(tEntryDetail, rEntry, idacc, null, null, amount);
        //    return rEntryDetail;
        //}



        bool doRipartisciRisultato()
        {
            //eventuali controlli di applicabilità
            if (!doVerifyRiserve())
            {
                return(false);
            }

            DataTable tEntry       = DataAccess.CreateTableByName(Meta.Conn, "entry", "*");
            DataTable tEntryDetail = DataAccess.CreateTableByName(Meta.Conn, "entrydetail", "*");
            DataSet   ds           = new DataSet();

            ds.Tables.Add(tEntry);
            metaEntry.SetDefaults(tEntry);

            ds.Tables.Add(tEntryDetail);
            metaEntryDetail.SetDefaults(tEntryDetail);

            RowChange.SetOptimized(tEntry, true);
            RowChange.ClearMaxCache(tEntry);
            RowChange.SetOptimized(tEntryDetail, true);
            RowChange.ClearMaxCache(tEntryDetail);


            ds.Relations.Add(new DataRelation("x", new [] { tEntry.Columns["yentry"], tEntry.Columns["nentry"] },
                                              new [] { tEntryDetail.Columns["yentry"], tEntryDetail.Columns["nentry"] },
                                              false
                                              ));


            string query = "select U.idupb,U.codeupb, U.title as upb, sum(amount) as amount from entrydetail ED " +
                           " LEFT OUTER JOIN UPB U ON ED.idupb=U.idupb " +
                           " WHERE " + QHS.AppAnd(QHS.CmpEq("ED.yentry", esercizio), QHS.CmpEq("idacc", idacc_risultatoesercizio)) +
                           " group by U.idupb,U.codeupb, U.title " +
                           " having sum(amount)<>0 ";

            DataTable t = Conn.SQLRunner(query);

            if (t == null)
            {
                MessageBox.Show(this, "Errore nella query che estrae i risultati da ripartire", "Errore");
                return(false);
            }

            if (t.Rows.Count == 0)
            {
                MessageBox.Show(this, "Nessun risultato economico da ripartire", "Avvertimento");
                return(true);
            }

            DataRow rEntry = getEntryRibaltamento(tEntry);

            if (rEntry == null)
            {
                MessageBox.Show(this, "Errore nella creazione della scrittura", "Errore");
                return(false);
            }

            foreach (DataRow r in t.Rows)
            {
                if (!calcolaDettaglioRibaltamento(tEntryDetail, rEntry, r))
                {
                    return(false);
                }
            }



            FrmEntryPreSave frm = new FrmEntryPreSave(ds.Tables["entrydetail"], Meta.Conn, t);
            DialogResult    dr  = frm.ShowDialog();

            if (dr != DialogResult.OK)
            {
                MessageBox.Show(this, "Operazione Annullata!");
                return(true);
            }


            PostData post = metaEntry.Get_PostData();

            post.InitClass(ds, Meta.Conn);
            if (post.DO_POST())
            {
                DataRow rEntryPosted = tEntry.Rows[0];
                EditEntry(rEntryPosted);
                MessageBox.Show(this, "Ripartimento del risultato economico completato con successo!");
            }
            else
            {
                MessageBox.Show(this, "Errore nel salvataggio della scrittura di ripartimento", "Errore");
                return(false);
            }
            return(true);
        }
Пример #2
0
        /*
         * Estrae tutti i dettagli scrittura associati allo stato patrimoniale, della scrittura di epilogo dell'anno precedente.
         * TODO
         * Deve fare questo calcolo distinguendo per idupb, idreg
         */

        private bool doApertura()
        {
            if (!doVerify())
            {
                return(false);
            }

            DataTable tEntry       = DataAccess.CreateTableByName(Meta.Conn, "entry", "*");
            DataTable tEntryDetail = DataAccess.CreateTableByName(Meta.Conn, "entrydetail", "*");
            DataSet   ds           = new DataSet();

            ds.Tables.Add(tEntry);
            metaEntry.SetDefaults(tEntry);

            ds.Tables.Add(tEntryDetail);
            metaEntryDetail.SetDefaults(tEntryDetail);

            tEntry.setOptimized(true);
            RowChange.ClearMaxCache(tEntry);

            tEntryDetail.setOptimized(true);
            RowChange.ClearMaxCache(tEntryDetail);


            ds.Relations.Add(new DataRelation("x", new[] { tEntry.Columns["yentry"], tEntry.Columns["nentry"] },
                                              new[] { tEntryDetail.Columns["yentry"], tEntryDetail.Columns["nentry"] },
                                              false
                                              ));

            int    lastEsercizio = esercizio - 1;
            string query         = "SELECT ED.amount, ACC.codeacc as olcodeacc, LKP.newidacc as idacc,  LKACC.codeacc, LKACC.title as account,"
                                   + " ED.idupb, UPB.codeupb , UPB.title as upb, "
                                   + " ED.idreg, REGISTRY.title as registry, "
                                   + " ED.competencystart, ED.competencystop, "
                                   + " ED.idaccmotive, ACCMOTIVE.codemotive, ACCMOTIVE.title as accmotive,ED.idepexp,ED.idepacc "
                                   + " FROM entrydetail ED "
                                   + " JOIN entry E "
                                   + " ON E.yentry = ED.yentry AND E.nentry = ED.nentry "
                                   + " LEFT OUTER JOIN accountlookup LKP "
                                   + " ON " + QHS.CmpEq("ED.idacc", QHS.Field("LKP.oldidacc"))
                                   + " LEFT OUTER JOIN account LKACC "
                                   + " ON " + QHS.CmpEq("LKP.newidacc", QHS.Field("LKACC.idacc"))
                                   + " JOIN account ACC "
                                   + " ON " + QHS.CmpEq("ED.idacc", QHS.Field("ACC.idacc"))
                                   + " LEFT OUTER JOIN UPB "
                                   + " ON " + QHS.CmpEq("ED.idupb", QHS.Field("UPB.idupb"))
                                   + " LEFT OUTER JOIN REGISTRY "
                                   + " ON " + QHS.CmpEq("ED.idreg", QHS.Field("REGISTRY.idreg"))
                                   + " LEFT OUTER JOIN ACCMOTIVE "
                                   + " ON " + QHS.CmpEq("ED.idaccmotive", QHS.Field("ACCMOTIVE.idaccmotive"))
                                   + " WHERE " + QHS.AppAnd(QHS.CmpEq("ED.yentry", lastEsercizio),
                                                            QHS.CmpEq("ACC.ayear", lastEsercizio), QHS.CmpEq("E.identrykind", 12)
                                                            , QHS.IsNotNull("ACC.idpatrimony") // non saltiamo nulla e ribaltiamo semplicemente tutti i conti attualizzandoli nell'anno successivo
                                                            );

            DataTable tSaldo = Meta.Conn.SQLRunner(query);

            if (tSaldo == null)
            {
                MessageBox.Show(this, "Errore nella query che estrae i conti da aprire", "Errore");
                return(false);
            }

            if (tSaldo.Rows.Count == 0)
            {
                MessageBox.Show(this, "La tabella dei saldi risulta vuota, procedura di apertura non eseguita", "Avvertimento");
                return(true);
            }

            DataRow rEntry = fillEntryApertura(tEntry);

            if (rEntry == null)
            {
                MessageBox.Show(this, "Errore nella creazione della scrittura", "Errore");
                return(false);
            }

            //decimal sumSP = 0;
            //bool addedSP = false;

            string f        = QHS.CmpEq("ayear", esercizio);
            object idaccPat = Meta.Conn.DO_READ_VALUE("config", f, "idacc_patrimony");

            if ((idaccPat == null) || (idaccPat == DBNull.Value))
            {
                MessageBox.Show(this, "Non è stato selezionato il conto che pareggia l'epilogo dei conti patrimoniali", "Errore");
                return(false);
            }

            foreach (DataRow rSaldo in tSaldo.Rows)
            {
                //if (!addedSP) addedSP = true;
                //sumSP += CfgFn.GetNoNullDecimal(rSaldo["amount"]);

                if (!calcolaDettaglioApertura(tEntryDetail, rEntry, rSaldo, idaccPat))
                {
                    return(false);
                }
            }



            FrmEntryPreSave frm = new FrmEntryPreSave(ds.Tables["entrydetail"], Meta.Conn, tSaldo);
            DialogResult    dr  = frm.ShowDialog();

            if (dr != DialogResult.OK)
            {
                MessageBox.Show(this, "Operazione Annullata!");
                return(true);
            }

            MetaData MetaEntry = MetaData.GetMetaData(this, "entry");
            var      Post      = new Easy_PostData_NoBL();



            Post.InitClass(ds, Meta.Conn);
            if (Post.DO_POST())
            {
                DataRow rEntryPosted = tEntry.Rows[0];
                EditEntry(rEntryPosted);
                MessageBox.Show(this, "Apertura dei conti effettuata");
            }
            else
            {
                MessageBox.Show(this, "Errore nel salvataggio della scrittura di apertura!", "Errore");
                return(false);
            }

            return(true);
        }