コード例 #1
0
        public static Rendiconto CreateRendiconto(DTORendiconto dto)
        {
            Rendiconto r = CreateRendiconto(!dto.IsRegionale, dto.Provincia, dto.Anno, dto.Regione);


            r.Proprietario = dto.Proprietario;


            //questa istruzione è neecessaria per calcolare i totali sui conti e
            //non sulle scritture

            r.Bilancio = r.Preventivo;

            BilancioNew b = r.Bilancio;

            //Bilancio p = r.Preventivo;

            foreach (DTORendicontoItem item in dto.Items)
            {
                AbstractBilancio c = b.FindNodeById(item.IdNodo) as ContoPreventivo;
                if (c != null)
                {
                    c.Importo = item.ImportoBilancio;
                }



                //AbstractBilancio c1 = p.FindNodeById(item.IdNodo) as ContoPreventivo;
                //if (c1 != null)
                //    c1.Importo = item.ImportoPreventivo;
            }


            return(r);
        }
コード例 #2
0
        public IList CreateListaConti(string nodeId)
        {
            IList result = new ArrayList();

            //definisco il nodo da dove eseguire la ricerca dei conti
            AbstractBilancio mainNode = null;

            //se il node id è nullo allora il main node sarà se stesso
            if (string.IsNullOrEmpty(nodeId))
            {
                mainNode = this;
            }
            else
            {
                mainNode = this.FindNodeById(nodeId);
            }


            if (mainNode == null)
            {
                return(result);
            }


            //se il nodo è una foglia lo aggiungo alla lista e ritorno
            if ((mainNode.IsLeaf))
            {
                result.Add(mainNode);
                return(result);
            }

            DoCreateListConti(result, mainNode);

            return(result);
        }
コード例 #3
0
        protected void FillDTORendicontoItemList(IList items, Rendiconto rendiconto, int livello)
        {
            //inserisco il dato relativo al nodo corrente
            DTORendicontoItem i = new DTORendicontoItem();

            if (string.IsNullOrEmpty(_id))
            {
                i.IdNodo = "Bilancio";
            }
            else
            {
                i.IdNodo = _id;
            }
            if (string.IsNullOrEmpty(_parentId))
            {
                if (!string.IsNullOrEmpty(_id))
                {
                    i.IdNodoPadre = "Bilancio";
                }
                else
                {
                    i.IdNodoPadre = "";
                }
            }
            else
            {
                i.IdNodoPadre = _parentId;
            }
            i.DescrizioneNodo = _description;
            i.ImportoBilancio = GetTotal;
            //i.SaldoIninziale = _saldoIniziale;
            i.Livello = livello;
            i.IsLeaf  = this.IsLeaf;
            //se sono nella root (nodo bialncio senza id)
            if (_id == "")
            {
                i.ImportoPreventivo = 0;
            }
            else
            {
                AbstractBilancio b = rendiconto.Preventivo.FindNodeById(_id);
                if (b != null)
                {
                    i.ImportoPreventivo = b.GetTotal;
                }
            }
            //aggiungo alla lista
            items.Add(i);

            //inserisco il dato relativo ai nodi figli se
            //non sono su una foglia
            if (!IsLeaf)
            {
                int lev = livello + 1;
                foreach (AbstractBilancio item in _sublist)
                {
                    item.FillDTORendicontoItemList(items, rendiconto, lev);
                }
            }
        }
コード例 #4
0
 /// <summary>
 /// Matodo utilizzato per rimuovoere una scrittur, un conto , una classificazione
 /// </summary>
 /// <param name="part"></param>
 public virtual void Remove(AbstractBilancio part)
 {
     foreach (AbstractBilancio item in _sublist)
     {
         if (item.Id.Equals(part.Id))
         {
             _sublist.Remove(item);
             return;
         }
     }
 }
コード例 #5
0
        public virtual void Add(AbstractBilancio part)
        {
            AbstractBilancio p = part as Scrittura;

            if (p != null)
            {
                throw new InvalidOperationException("Impossibile aggiungere una scrittura ad una classificazione generica");
            }

            _sublist.Add(part);
        }
コード例 #6
0
        private AbstractBilancio GetStructure(NodeUpdate item)
        {
            AbstractBilancio structure = null;

            if (item.UpdateType == "Bilancio")
            {
                structure = _bilancio;
            }
            else if (item.UpdateType == "Preventivo")
            {
                structure = _preventivo;
            }
            return(structure);
        }
コード例 #7
0
 private void DoCreateListConti(IList result, AbstractBilancio mainNode)
 {
     foreach (AbstractBilancio item in mainNode.SubList)
     {
         if (item.IsLeaf)
         {
             result.Add(item);
         }
         else
         {
             DoCreateListConti(result, item);
         }
     }
 }
コード例 #8
0
        protected AbstractBilancio FindSubNodeByBescriptionPath(ArrayList arr, AbstractBilancio current)
        {
            //se si tratta di una foglia ritorno un valore null
            //in quanto non può verificare i sottonodi
            if (IsLeaf)
            {
                return(null);
            }


            // se nella ricorsione non trovo elementi da ricercare
            //c'è un errore nell'algoritmo
            if (arr.Count == 0)
            {
                throw new Exception("Errore nella ricerca del nodo. Lista elementi da ricercare vuota prima di eseguire il confronto");
            }



            // prendo il primo elemento
            string check = arr[0].ToString();



            //ciclo su tutti gli elementi in lista
            foreach (AbstractBilancio item in current.SubList)
            {
                //opero il confronto con la descrizione dell'elemento
                if (item.Description.Equals(check))
                {
                    //se la descrizione è la stessa ho trovato il nodo
                    //relativo al check

                    //rimuovo l'elemento trovato dalla lista e se la lista è vuota vuol dire che
                    //ho trovato l'elemento che mi interessa
                    arr.RemoveAt(0);

                    if ((arr.Count == 0) || IsLeaf)
                    {
                        return(item);
                    }

                    return(FindSubNodeByBescriptionPath(arr, item));
                }
            }
            return(null);
        }
コード例 #9
0
        public void CheckMandatoryContosChangedByVersions()
        {
            AbstractBilancio banca           = _bilancio.FindNodeById(BANCA4);
            AbstractBilancio bancaPreventivo = _preventivo.FindNodeById(BANCA4);

            if (banca == null && bancaPreventivo == null)
            {
                //vuol dire che non cè la banca allora creo la lista delle banche per il bilancio e per il preventivo
                //crerco il nodo deli depositi bancari
                AbstractBilancio depositi = _bilancio.FindNodeById(DEPOSITI_BANCARI_E_POSTALI);
                depositi.Add(new Conto("Banca4", "A.D.2.d", "A.D.2"));
                depositi.Add(new Conto("Banca5", "A.D.2.e", "A.D.2"));
                depositi.Add(new Conto("Banca6", "A.D.2.f", "A.D.2"));


                AbstractBilancio depositiPreventivo = _preventivo.FindNodeById(DEPOSITI_BANCARI_E_POSTALI);
                depositiPreventivo.Add(new ContoPreventivo("Banca4", "A.D.2.d", "A.D.2"));
                depositiPreventivo.Add(new ContoPreventivo("Banca5", "A.D.2.e", "A.D.2"));
                depositiPreventivo.Add(new ContoPreventivo("Banca6", "A.D.2.f", "A.D.2"));
            }
        }
コード例 #10
0
        /// <summary>
        /// Ricerca un nodo attraverso il proprio id
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public AbstractBilancio FindNodeById(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                return(null);
            }


            if (_id.Equals(id))
            {
                return(this);
            }

            foreach (AbstractBilancio item in _sublist)
            {
                AbstractBilancio b = item.FindNodeById(id);
                if (b != null)
                {
                    return(b);
                }
            }

            return(null);
        }
コード例 #11
0
        private bool UpdateBilancio(NodeUpdate item)
        {
            AbstractBilancio structure = GetStructure(item);

            if (structure == null)//c'è un errore nel file
            {
                return(false);
            }


            //il parent non può essere una stringa nulla poichè rappresenterebbe
            //la radice dell'albero che può avere solo le voci di spesa, entrate e finanza
            if (string.IsNullOrEmpty(item.ParentId))
            {
                return(false);
            }

            //se devo aggiungere o modificare un nodo esso deve avere un
            //id ed una descrizione  non nulli
            if (string.IsNullOrEmpty(item.Id))
            {
                return(false);
            }
            if (string.IsNullOrEmpty(item.Description))
            {
                return(false);
            }



            //a questo punto verifico per prima cosa l'esistenza del parent
            //se non esiste c'è un errore nel file.
            //anche se teoricamente il processo potrebbe continuare è bene che il file sia sempre corretto
            AbstractBilancio parent = structure.FindNodeById(item.ParentId);

            if (parent == null)
            {
                return(false);
            }

            //a questo punto il parent esiste.
            //rimane da verifica che il nodo da aggiornare se esiste esiste sotto il parent
            // altrimenti si tratta di una imprecisione nel file di aggiornamento
            AbstractBilancio nodeInStructure = structure.FindNodeById(item.Id);
            AbstractBilancio nodeInParent    = structure.FindNodeById(item.Id);

            //se non sono nulli vuol dire che il nodo è al di sotto del parent
            //ed è pronto per essere modificato
            if (nodeInParent != null && nodeInStructure != null)
            {
                nodeInParent.Description = item.Description;
                return(true);
            }
            else if (nodeInParent == null && nodeInStructure == null)//il nodo non esiste e va creato
            {
                AbstractBilancio b = CreateStructureItem(item.ContoType, item.Id, item.Description, item.ParentId);
                b.ParentName = parent.Description;
                parent.Add(b);
                return(true);
            }
            else // c'è un errore nel file
            {
                return(false);
            }
        }
コード例 #12
0
 public override void Add(AbstractBilancio part)
 {
     throw new InvalidOperationException("Tentativo di aggiungere sottoelementi ad un conto preventivo");
 }
コード例 #13
0
        public void Remove(string idScrittura, AbstractBilancio cp)
        {
            Scrittura s = FindNodeById(idScrittura) as Scrittura;

            if (s == null)
            {
                return;
            }

            //commento la riga di codice che verifica la presenza di una
            //scrittura autogenerata in un conto finanziario. Tale scrittura puo'
            //trovarsi in qualsiasi tipo di conto.
            //if (CalculateTipoConto() == TipoConto.Finanza)
            if (s.AutoGenerated == true)
            {
                throw new InvalidOperationException("Impossibile eliminare una scrittura autogenerata. Per eliminarla procedere alla eliminazione della scrittura dal relativo conto!");
            }


            //se il conto di contropartita risulta nullo vuol dire che devo cercare la scrittura
            //di cotropartita nell'albero delle entrate o delle uscite a seconda che il tipoConto
            //sia entrate o uscite
            //if (contoContropartita != null)
            //{

            BilancioNew bil = cp as BilancioNew;

            if (bil == null)
            {
                throw new InvalidOperationException("Impossibile convertire la contropartita di una partita di giro in un oggetto Bilancio da cui ricercare i conto di contropartita!!!");
            }

            Conto contoContropartita = bil.FindNodeById(s.IdContropartita) as Conto;

            Scrittura s1 = contoContropartita.FindNodeById(s.Id) as Scrittura;

            if (s1 != null)
            {
                contoContropartita.Remove(s1);
            }
            //}
            //else
            //{
            //    TipoConto c = CalculateTipoConto();
            //    //se la contropartita è nulla vuol dire che ho passato l'intero bilancio
            //    Bilancio bil = cp as Bilancio;
            //    // se è nullo c'è un errore imprevisto
            //    if (bil == null)
            //        throw new InvalidOperationException("Impossibile convertire la contropartita di una partita di giro in un oggetto Bilancio da cui ricercare i conto di contropartita!!!");

            //    //*****************************
            //    //definisco l'id della classificazione dove ricercare il conto
            //    string idClassificazione = "";

            //    if (c == TipoConto.Entrate)
            //        //dovro' cercare la scrittura di contropartita nelle spese
            //        idClassificazione = "S";
            //    else
            //        //dovro' cercare la scrittura di contropartita nelle entrate
            //        idClassificazione = "E";



            //    //rimuovo la scrittura previa ricerca
            //    Classificazione clas = bil.FindNodeById(idClassificazione) as Classificazione;
            //    //cerco la scritttura
            //    Scrittura s1 = clas.FindNodeById(s.Id) as Scrittura;
            //    if (s1 != null)
            //    {
            //        //ne recupero il conto padre
            //        Conto cc = clas.FindNodeById(s1.ParentId) as Conto;
            //        //la elimino dal conto
            //        cc.Remove(s1);
            //    }


            //    //*************************************************

            //}



            _sublist.Remove(s);
        }
コード例 #14
0
 public override void Add(AbstractBilancio part)
 {
     throw new InvalidOperationException("Chiamata a metodo non implementato. Utilizzare metodo alternativo!");
 }