예제 #1
0
        public RipartizioneMovimentoUC(RipartizioneSpeseDTO ripartizione, string key, MovimentoContabileDTO movimentoContabileDTO, EsercizioDTO esercizioDTO, decimal importo, bool readOnly)
        {
            InitializeComponent();

            _ripartizione = ripartizione;
            _key = key;
            _movimentoContabileDTO = movimentoContabileDTO;
            _esercizioDTO = esercizioDTO;
            _importo = importo;
            _readOnly = readOnly;

            inizializza();
        }
예제 #2
0
        public RipartizioneMovimentoUI(RipartizioneSpeseDTO ripartizione, string key, MovimentoContabileDTO movimentoContabileDTO, EsercizioDTO esercizioDTO, decimal importo, bool readOnly)
        {
            InitializeComponent();

            if(ripartizione == null)
                Close();

            _control = new RipartizioneMovimentoUC(ripartizione, key, movimentoContabileDTO, esercizioDTO, importo, readOnly) { Dock = DockStyle.Fill };
            tableLayoutPanel1.Controls.Add(_control, 0, 0);

            if (readOnly)
                btnConferma.Enabled = false;

            persistWindowComponent1.UserName = Security.Login.Instance.CurrentLogin().LoginName;
        }
        public Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> SetRipartizioneByMovimento(DettaglioSpesaDTO dettaglio, MovimentoContabileDTO movimento, EsercizioDTO esercizio, RipartizioneSpeseDTO ripartizioneDettaglio, Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> ripartizione)
        {
            var ripartizioneDettaglioNew = GetRipartizioneByMovimento(movimento, esercizio, ripartizioneDettaglio);
            ripartizione[dettaglio] = ripartizioneDettaglioNew;

            //if (_isMultiSpesa)
            //{
            //    Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> newRipartizione = new Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO>(ripartizione.Count);
            //    foreach (KeyValuePair<DettaglioSpesaDTO, RipartizioneSpeseDTO> kvp in ripartizione)
            //    {
            //        RipartizioneSpeseDTO riparto = ripartizioneDettaglioNew;
            //        if (kvp.Key != dettaglio)
            //        {
            //            // Duplico il flag di selezione
            //            if (kvp.Value != null)
            //            {
            //                string key = GetKey(movimento);
            //                if (kvp.Value.UnitaImmobiliari.ContainsKey(key))
            //                {
            //                    List<UnitaImmobiliareSelectedDTO> listaUnita = kvp.Value.UnitaImmobiliari[key];
            //                    foreach (UnitaImmobiliareSelectedDTO unita in listaUnita)
            //                    {
            //                        unita.Selezionato = getSelezionatoUnita(ripartizioneDettaglioNew.UnitaImmobiliari[key], unita.ID);
            //                        unita.Stato = "U";
            //                    }
            //                }
            //            }

            //            // Calcolo la ripartizione
            //            MovimentoContabileDTO movimentoClone = cloneMovimento(movimento, dettaglio.ImportoLordo.Value, kvp.Key.ImportoLordo.Value);
            //            if (movimentoClone.IdConto > 0)
            //            {
            //                riparto = GetRipartizioneByMovimento(movimentoClone, esercizio, kvp.Value);
            //                if (kvp.Value != null)
            //                {
            //                    foreach (MovimentoContabileDTO movimentoDto in riparto.Testata.Movimenti)
            //                    {
            //                        if (isEqualMovimento(movimento, movimentoDto))
            //                        {
            //                            movimentoDto.Importo = movimentoClone.Importo;
            //                            movimentoDto.IdConto = movimentoClone.IdConto;
            //                            movimentoDto.IdSottoConto = movimentoClone.IdSottoConto;
            //                        }
            //                    }
            //                }
            //            }
            //            else
            //            {
            //                ILog _log = LogManager.GetLogger("Sfera");
            //                log4net.MDC.Set("user", Gipasoft.Security.Login.Instance.CurrentLogin().LoginName);
            //                log.Warn("ATTENZIONE: Trovato movimento senza conti definito - " + Gipasoft.Library.Utility.GetMethodDescription() + " - dettaglio:" + dettaglio.ID + " - esercizio:" + esercizio.ID);
            //            }
            //        }

            //        newRipartizione.Add(kvp.Key, riparto);
            //        kvp.Key.Movimenti = riparto.Testata.Movimenti;
            //    }
            //    ripartizione = newRipartizione;
            //}

            return ripartizione;
        }
예제 #4
0
        public bool Conferma()
        {
            var result = true;

            btnConferma.Focus();
            setValidators(true);
            spesaValidationSummary.Validate();
            if (spesaValidationSummary.IsValid)
            {
                // --------------------------------------------
                // Controllo Data Registrazione
                // --------------------------------------------
                var messageDataList = getMovimentoContabileService().IsAllowDataRegistrazione(new List<int>(1) {_condominio.ID}, _esercizio.ID, dataRegistrazione.DateTime);
                if(messageDataList.Count > 0)
                {
                    var messageData = "La data di registrazione " + dataRegistrazione.DateTime + " non è ammessa:" + Environment.NewLine;
                    messageData = messageDataList.Aggregate(messageData, (current, mess) => current + (mess + Environment.NewLine));
                    CommonMessages.DisplayWarning(messageData);
                    return false;
                }

                // --------------------------------------------
                // Controllo Data Scadenza se pagamento immediato
                // --------------------------------------------
                if (_pagamentoImmediato)
                {
                    var messaggiDataPagamento = new List<string>();
                    foreach (var scadenzaFatturaDTO in _spesa.Scadenze)
                    {
                        if (scadenzaFatturaDTO != null)
                        {
                            var messageData = getMovimentoContabileService().IsAllowDataPagamento(_condominio.ID, scadenzaFatturaDTO.Scadenza.GetValueOrDefault());
                            if (!string.IsNullOrEmpty(messageData))
                                messaggiDataPagamento.Add(messageData);
                        }                        
                    }

                    if (messaggiDataPagamento.Count > 0)
                    {
                        var messageDataStr = messaggiDataPagamento.Aggregate(string.Empty, (current, mess) => current + (mess + Environment.NewLine));
                        CommonMessages.DisplayWarning(messageDataStr);
                        return false;
                    }
                }

                // --------------------------------------------
                // Controllo sul numero fattura
                // --------------------------------------------
                var messageAuth = _fatturaService.IsAllowNumeroFattura(_spesa);
                if (string.IsNullOrEmpty(messageAuth.FatalMessage))
                {
                    var resultNumeroFattura = DialogResult.Yes;
                    if (!string.IsNullOrEmpty(messageAuth.WarnMessage))
                        resultNumeroFattura = CommonMessages.DisplayConfirm("ATTENZIONE il controllo sul numero fattura ha dato i seguenti risultati:" + Environment.NewLine + Environment.NewLine + messageAuth.WarnMessage + Environment.NewLine + Environment.NewLine + "Vuoi confermare l'inserimento della spesa?");

                    if (resultNumeroFattura == DialogResult.Yes)
                    {
                        RipartizioneSpeseDTO ripartizione;
                        if (importoDettaglioSpesa.Value != 0)
                        {
                            _spesa.AltreSpese = altreSpeseDettaglio.Value;
                            _spesa.AltreSpeseEsenti = altreSpeseEsenti.Value;
                            _spesa.SpeseEsentiRitenuta = speseEsentiRitenuta.Value;
                            _spesa.AliquotaRitenuta = (decimal?)aliquotaRitenuta.Value;
                            _spesa.AliquotaCassaProfessionisti = (decimal?)cassaProfessionistiDettaglio.Value;
                            _spesa.IsRitenutaCalcoloImponibile = ritenutaCalcolataImponibile.Checked;
                            ripartizione = getCurrentRipartizione();
                            if (_isInserimento && modelloRipartizione.Value == null && ripartizioneDettaglio.Rows.Count > 1 && (ripartizione == null || string.IsNullOrEmpty(getCurrentRipartizione().NomeModello)))
                            {
                                var form = new SalvataggioModelloRegistrazioneContabile((List<ModelloRegistrazioneContabileDTO>)modelliContabiliBindingSource.DataSource, modelloRipartizione.Text, descrizioneDettaglio.Text);
                                if (form.ShowDialog() != DialogResult.Cancel)
                                {
                                    if (ripartizione == null)
                                    {
                                        ripartizione = new RipartizioneSpeseDTO
                                        {
                                            Testata = new TestataMovimentoContabileDTO {IdEsercizio = _esercizio.ID}
                                        };
                                        setCurrentRipartizione(ripartizione);
                                    }
                                    ripartizione.NomeModello = form.Nome;
                                    ripartizione.DescrizioneVoceSpesa = form.DescrizioneVoceSpesa;
                                    ripartizione.AssociatoFornitore = form.AssociatoFornitore;
                                }

                                form.Dispose();
                            }

                            // Se non sono ancora state caricate creo le scadenze
                            if (scadenze.Rows.Count == 0)
                                loadScadenzeTab();
                        }

                        // Salvo i valori a video nell'oggetto DTO
                        setDettaglioDataSource((DettaglioSpesaDTO)dettagliSpesa.ActiveTab.Tag, null);

                        _spesa.IdFornitore = sceltaFornitore.SelectedFornitore.ID;
                        _spesa.TipoDocumento = tipoDocumento.SelectedItem.DataValue.ToString();
                        _spesa.DataRegistrazione = dataRegistrazione.DateTime;

                        if (_spesaRiferimento != null)
                            _spesa.IdSpesaRiferimento = _spesaRiferimento.ID;

                        SpesaInfoDTO spesaInfo =null;
                        try
                        {
                            if (_spesa != null)
                            {
                                //spesaInfo = _fatturaService.Salva(_spesa, _ripartizione, getMovimentoContabileService().IsMultiSpesa);

                                var form = new ExecuteLoadDataObjectAsync<SpesaInfoDTO>("Salvataggio della fattura in corso ....." + Environment.NewLine + "Si prega di attendere.");
                                Func<SpesaInfoDTO> loadDati = () => _fatturaService.Salva(_spesa, _ripartizione, getMovimentoContabileService().IsMultiSpesa);
                                form.LoadData(loadDati);
                                form.ShowDialog();
                                spesaInfo = form.DataSourceObject;
                                form.Dispose();
                            }
                        }
                        catch (Exception ex)
                        {
                            
                            _log.Error("Errore non previsto nell'inserimento della spesa - " + Utility.GetMethodDescription() + " - spesa:" + getIdSpesa().GetValueOrDefault(), ex);
                            spesaInfo = new SpesaInfoDTO { Message = "Errore imprevisto nell'inserimento della spesa" };            
                        }

                        if (spesaInfo != null && string.IsNullOrEmpty(spesaInfo.Message))
                        {
                            _spesa.ID = spesaInfo.Id;

                            _spesa.DisplayName = _spesa.Dettagli[0].Descrizione;
                            if (_speseAccorpate && _isFirstSpesa && _spesaRiferimento == null)
                            {
                                _spesaRiferimento = _spesa;
                                _isFirstSpesa = false;
                                _fatturaService.SetSpesaRiferimento(_spesaRiferimento.ID, _spesaRiferimento.ID);
                            }

                            if (modelloFornitore.Checked)
                                getModelloContabileService().AssociaFornitore((ModelloRegistrazioneContabileDTO)modelloRipartizione.SelectedItem.ListObject, sceltaFornitore.SelectedFornitore);

                            // Se è stato richiesto il salvataggio del modello devo ricaricare la cache dei modelli
                            if (importoDettaglioSpesa.Value != 0)
                            {
                                ripartizione = getCurrentRipartizione();
                                if (!string.IsNullOrEmpty(ripartizione?.NomeModello))
                                    getModelloContabileService().Reload(_esercizio);
                            }

                            if (_isInserimento)
                                CommonMessages.DisplayComplete("La spesa è stata correttamente inserita." + Environment.NewLine + "Sul documento deve essere riportato: " + spesaInfo.IdentificativoArchiviazione);
                            else
                                CommonMessages.DisplayComplete("La spesa è stata correttamente aggiornata." + Environment.NewLine + "Sul documento deve essere riportato: " + spesaInfo.IdentificativoArchiviazione);
                            Dirty = false;

                            OnConfirm(new ConfirmArgs(_spesa));

                            if (_formGestione == null || !_formGestione.IsDisposed)
                            {
                                if (_isInserimento)
                                    Reload(_condominio, _esercizio);
                                Dirty = false;
                            }
                        }
                        else
                        {
                            if (spesaInfo != null)
                                CommonMessages.DisplayWarning("Si sono verificati dei problemi nell'aggiornamento della spesa:" + Environment.NewLine + spesaInfo.Message + Environment.NewLine + "Si prega di riprovare.");
                            result = false;
                        }
                    }
                }
                else
                {
                    CommonMessages.DisplayWarning("Si sono verificati i seguenti errori nel controllo del numero di fattura:" + Environment.NewLine + messageAuth.FatalMessage + Environment.NewLine + "Si prega di riprovare.");
                    return false;
                }
            }
            else
            {
                spesaValidationSummary.ShowErrorSummary();
                result = false;
            }

            setValidators(false);
            return result;
        }
        private void afterRowUpdate(UltraGridRow row)
        {
            var movimento = row.ListObject as MovimentoContabileDTO;
            if (movimento != null && isRipartizioneDaCalcolare())
                _ripartizione = getMovimentoContabileService().GetRipartizioneByMovimento(movimento, _esercizio, _ripartizione);

            setDettaglioResiduo();
            if (!_confirmByParent)
                btnConferma.Visible = true;
            btnRicevuta.Visible = true;
        }
        private void clearAllFields()
        {
            try
            {
                clearDettaglioFields();
                _dataContabile = null;
                _causale = null;
                _ripartizione = null;
                movimentoContabileBindingSource.DataSource = _movimentiDare = new List<MovimentoContabileDTO>();
                _movimentoAvere = new MovimentoContabileDTO();
                salvaModello.Checked = false;
                salvaModello.Enabled = true;

                sottoContoDTOBindingSource.DataSource = new List<SottoContoDTO>();
                sottoContoPatrimoniale.Value = null;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore non previsto nella CLEAR della videata - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                throw;
            }
        }
        private void backgroundWorkerLoadDatiRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            _ripartizione = e.Result as RipartizioneSpeseDTO;

            if (_esercizio != null && _esercizio.StatoEsercizio == StatoEsercizioEnum.Aperto)
            {
                btnRiparto.Enabled = true;
                btnConferma.Enabled = true;
                if(_formGestione != null)
                    _formGestione.SetEnableEdit(true);
            }
        }
        private void setRipartizioneMovimento(MovimentoContabileDTO movimento)
        {
            try
            {
                if (movimento != null)
                {
                    var key = getMovimentoContabileService().GetKey(movimento);
                    if (_ripartizione == null || !_ripartizione.UnitaImmobiliari.ContainsKey(key))
                    {
                        var form = new ExecuteLoadDataObjectAsync<RipartizioneSpeseDTO>("La funzione è in corso di esecuzione ....." + Environment.NewLine + "Si prega di attendere.");
                        Func<RipartizioneSpeseDTO> loadDati;
                        if (movimento.ID == 0)
                            loadDati = () => getMovimentoContabileService().GetRipartizioneByMovimento(movimento, _esercizio, _ripartizione);
                        else
                            loadDati = () => getMovimentoContabileService().GetRipartizioneByMovimentoEsistente(movimento, _esercizio, _ripartizione, null);

                        form.LoadData(loadDati);
                        form.ShowDialog();
                        _ripartizione = form.DataSourceObject;
                        form.Dispose();
                        if (_testata != null && _ripartizione != null)
                            _ripartizione.Testata.ID = _testata.ID;
                        else
                        {
                            if(_ripartizione == null)
                                _log.WarnFormat("DataSourceObject a NULL - {0} - movimento:{1}", Utility.GetMethodDescription(), movimento.ID);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var idMovimento = string.Empty;
                if (movimento != null)
                    idMovimento = movimento.ID.ToString();
                
                _log.ErrorFormat("Errore inaspettato nel set della ripartizione - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), idMovimento);
            }
        }
예제 #9
0
        private string getGruppiAddebito(RipartizioneSpeseDTO ripartizione, string key)
        {
            string gruppiAddebito = string.Empty;
            
            // ==================================================================
            //  Controllo se la spesa è stata addebitata solo ad alcune scale
            // ==================================================================
            var gruppi = ripartizione.Gruppi[key];
            var isGruppoPersonalizzato = (from g in gruppi
                                           group g by g.Selezionato).Count() > 1;
            if (isGruppoPersonalizzato)
            {
                for (var i = 0; i < gruppi.Length; i++)
                {
                    if (gruppi[i].Selezionato)
                        gruppiAddebito += gruppi[i].ID + "&";
                }
            }

            // ==================================================================
            //  Controllo se la spesa è stata addebitata solo ad alcuni stabili
            // ==================================================================
            if (!isGruppoPersonalizzato)
            {
                gruppiAddebito = string.Empty;
                var stabili = ripartizione.Stabili[key];
                var isStabilePersonalizzato = (from s in stabili
                                                group s by s.Selezionato).Count() > 1;

                //bool isStabilePersonalizzato = false;
                //for (int i = 0; i < stabili.Length; i++)
                //{
                //    if (!stabili[i].Selezionato)
                //        isStabilePersonalizzato = true;
                //}

                if (isStabilePersonalizzato)
                {
                    var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                    for (var i = 0; i < stabili.Length; i++)
                    {
                        if (stabili[i].Selezionato)
                        {
                            var palazzina = daoFactory.GetPalazzinaDao().GetById(stabili[i].ID, false);
                            gruppiAddebito = palazzina.GruppiStabile.Aggregate(gruppiAddebito, (current, gruppo) => current + (gruppo.ID.ToString() + "&"));
                        }
                    }
                }
                else
                    gruppiAddebito = null;
            }

            gruppiAddebito = !string.IsNullOrEmpty(gruppiAddebito) ? gruppiAddebito.Substring(0, gruppiAddebito.Length - 1) : null;

            return gruppiAddebito;
        }
예제 #10
0
        private void clearFlag(RipartizioneSpeseDTO ripartizione, string key)
        {
            // Lotti
            if (ripartizione.Lotti.ContainsKey(key))
            {
                var listaLotti = ripartizione.Lotti[key];
                foreach (var t in listaLotti)
                    t.Stato = string.Empty;
            }

            // Stabili
            if (ripartizione.Stabili.ContainsKey(key))
            {
                var listaStabili = ripartizione.Stabili[key];
                foreach (var t in listaStabili)
                    t.Stato = string.Empty;
            }

            // Gruppi
            if (ripartizione.Gruppi.ContainsKey(key))
            {
                var listaGruppi = ripartizione.Gruppi[key];
                foreach (var t in listaGruppi)
                    t.Stato = string.Empty;
            }

            // Unità
            if (ripartizione.UnitaImmobiliari.ContainsKey(key))
            {
                var listaUnita = ripartizione.UnitaImmobiliari[key];
                foreach (var t in listaUnita)
                    t.Stato = string.Empty;
            }
        }
예제 #11
0
        private string getInstanceModificata(RipartizioneSpeseDTO ripartizione, string key)
        { 
            // Lotti
            if (ripartizione.Lotti.ContainsKey(key))
            {
                var listaLotti = ripartizione.Lotti[key];
                if (listaLotti.Any(t => t.Stato == "U"))
                    return "L";
            }

            // Stabili
            if (ripartizione.Stabili.ContainsKey(key))
            {
                var listaStabili = ripartizione.Stabili[key];
                if (listaStabili.Any(t => t.Stato == "U"))
                    return "S";
            }

            // Gruppi
            if (ripartizione.Gruppi.ContainsKey(key))
            {
                var listaGruppi = ripartizione.Gruppi[key];
                if (listaGruppi.Any(t => t.Stato == "U"))
                    return "G";
            }

            // Unità
            if (ripartizione.UnitaImmobiliari.ContainsKey(key))
            {
                BusinessInstanceSelectedDTO[] listaUnita = ripartizione.UnitaImmobiliari[key];
                if (listaUnita.Any(t => t.Stato == "U"))
                    return "U";
            }

            return string.Empty;
        }
예제 #12
0
        public TipoFiltro GetTipoFiltroAttivo(MovimentoContabileDTO movimento, RipartizioneSpeseDTO ripartizione)
        {
            try
            {
                if (ripartizione != null)
                {
                    if (movimento != null)
                    {
                        if (movimento.IdConto > 0)
                        {
                            int? idEsercizio = null;
                            if (ripartizione.Testata != null && ripartizione.Testata.IdEsercizio != null)
                                idEsercizio = ripartizione.Testata.IdEsercizio;

                            var conto = _pianoContiService.GetById(movimento.IdConto.GetValueOrDefault(), idEsercizio);
                            if (conto.IsSpesePersonali)
                                return TipoFiltro.UnitaImmobiliare;
                        }
                    }

                    if (movimento != null)
                    {
                        var key = GetKey(movimento);
                        if (ripartizione.Lotti.ContainsKey(key) && ripartizione.Lotti[key].Any(item => !item.Selezionato))
                            return TipoFiltro.Lotto;

                        if (ripartizione.Stabili.ContainsKey(key) && ripartizione.Stabili[key].Any(item => !item.Selezionato))
                            return TipoFiltro.Stabile;

                        if (ripartizione.Gruppi.ContainsKey(key) && ripartizione.Gruppi[key].Any(item => !item.Selezionato))
                            return TipoFiltro.Scala;

                        if (ripartizione.UnitaImmobiliari.ContainsKey(key) && ripartizione.UnitaImmobiliari[key].Any(item => !item.Selezionato))
                            return TipoFiltro.UnitaImmobiliare;
                    }

                }

                return TipoFiltro.Scala;
            }
            catch (Exception ex)
            {
                var log = LogManager.GetLogger("Sfera");
                log.WarnFormat("Errore inaspettato nella lettura del filtro attivo - {0} - movimento:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), movimento != null ? movimento.ID.ToString(CultureInfo.InvariantCulture) : "<NULL>", Login.Instance.CurrentLogin().Azienda);

                return TipoFiltro.Scala;
            }
        }
예제 #13
0
        public SpesaInfoDTO Salva(RipartizioneSpeseDTO ripartizione, MovimentoContabileDTO movimentoAvere, List<MovimentoContabileDTO> movimentiDare, int? idMovimentoBancario)
        {
            if (ripartizione.Testata.ID > 0)
                ripartizione.Testata.Stato = "U";

            if (ripartizione.Testata.ID > 0 && ripartizione.UnitaImmobiliari != null)
            {
                foreach (var movimento in movimentiDare)
                {
                    var key = GetKey(movimento);
                    if (movimento.DettaglioRipartizione != null && ripartizione.UnitaImmobiliari.ContainsKey(key))
                    {
                        movimento.DettaglioRipartizione.Clear();
                        foreach (var itemRipartizione in ripartizione.UnitaImmobiliari[key])
                        {
                            if (itemRipartizione.Selezionato)
                            {
                                movimento.DettaglioRipartizione.Add(new SpeseUnitaDTO
                                {
                                    ID = 0,
                                    IdMovimentoRiferimento = movimento.ID,
                                    IdUnitaRiferimento = itemRipartizione.ID,
                                    Importo = itemRipartizione.Importo
                                });
                            }
                        }
                    }
                }
            }

            SpesaInfoDTO result;
            try
            {
                result = GetServiceClient().SalvaMovimento(ripartizione, movimentoAvere, movimentiDare, idMovimentoBancario, GetUserInfo());
            }
            catch (Exception ex)
            {
                var log = LogManager.GetLogger("Sfera");
                log.ErrorFormat("Errore inaspettato nella funzione - {0} - movimentoAvere:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), movimentoAvere.ID, Login.Instance.CurrentLogin().Azienda);

                throw;
            }

            if (result.StampaEtichettaArchiviazione)
            {
                var workerStampaEtichetta = new BackgroundWorker();
                workerStampaEtichetta.DoWork += workerStampaEtichettaDoWork;
                workerStampaEtichetta.RunWorkerAsync(new object[] { result.IdentificativoArchiviazione, result.TrayEtichettatriceAttivazioneOttica });
            }

            CloseService();
            return result;
        }
예제 #14
0
        public void SetSelezioneItemRiparto(TipoFiltro tipo, RipartizioneSpeseDTO ripart, BusinessInstanceSelectedDTO item, MovimentoContabileDTO movimento, Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> ripartizione)
        {
            try
            {
                if (movimento != null && ripart != null)
                {
                    var key = GetKey(movimento);

                    // Se key è null o vuota vuol dire che il metdo è stato richiamato nell'evento cell update di una riga nuova: non deve essere fatto nulla
                    if (!string.IsNullOrEmpty(key))
                    {
                        if (item != null)
                            item.Stato = "U";

                        // Imposto come selezionati tutti gli altri filtri
                        switch (tipo)
                        {
                            case TipoFiltro.Scala:
                                if(ripart.Lotti != null && ripart.Lotti.ContainsKey(key))
                                    resetItemFiltro(ripart.Lotti[key]);
                                if (ripart.Stabili != null && ripart.Stabili.ContainsKey(key))
                                    resetItemFiltro(ripart.Stabili[key]);
                                break;
                            case TipoFiltro.Stabile:
                                if (ripart.Lotti != null && ripart.Lotti.ContainsKey(key))
                                    resetItemFiltro(ripart.Lotti[key]);
                                if (ripart.Gruppi != null && ripart.Gruppi.ContainsKey(key))
                                    resetItemFiltro(ripart.Gruppi[key]);
                                break;
                            case TipoFiltro.Lotto:
                                if (ripart.Stabili != null && ripart.Stabili.ContainsKey(key))
                                    resetItemFiltro(ripart.Stabili[key]);
                                if (ripart.Gruppi != null && ripart.Gruppi.ContainsKey(key))
                                    resetItemFiltro(ripart.Gruppi[key]);
                                break;
                        }

                        // Se multispesa tutti i filtri devono corrispondere
                        try
                        {
                            if (_isMultiSpesa && ripartizione != null)
                            {
                                foreach (var kvp in ripartizione)
                                {
                                    try
                                    {
                                        kvp.Value.Gruppi = ripart.Gruppi;
                                        kvp.Value.Lotti = ripart.Lotti;
                                        kvp.Value.Stabili = ripart.Stabili;
                                        kvp.Value.UnitaImmobiliari = ripart.UnitaImmobiliari;
                                    }
                                    catch (Exception ex)
                                    {
                                        var log = LogManager.GetLogger("Sfera");
                                        log.Error("Errore inaspettato nella  - MULTISPESA SINGOLO - " + Utility.GetMethodDescription() + " - tipo:" + tipo + " - azienda:" + Login.Instance.CurrentLogin().Azienda, ex);
                                        throw;
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            var log = LogManager.GetLogger("Sfera");
                            log.Error("Errore inaspettato nella  - MULTISPESA - " + Utility.GetMethodDescription() + " - tipo:" + tipo + " - azienda:" + Login.Instance.CurrentLogin().Azienda, ex);
                            throw;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var log = LogManager.GetLogger("Sfera");
                log.Error("Errore inaspettato nella funzione - " + Utility.GetMethodDescription() + " - tipo:" + tipo + " - azienda:" + Login.Instance.CurrentLogin().Azienda, ex);
            }
        }
예제 #15
0
        public ModelloRegistrazioneContabile SalvaModelloRipartizioneContabile(RipartizioneSpeseDTO ripartizione, IMovimentiContainer containerMovimenti, List<MovimentoContabileDTO> movimentiEconomici, decimal importo)
        {
            // Salvataggio modello
            if ( !string.IsNullOrEmpty(ripartizione?.NomeModello))
            {
                var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                var ripartizioneSpeseService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IRipartizioneSpeseService>();
                var esercizio = daoFactory.GetEsercizioDao().GetById(ripartizione.Testata.IdEsercizio.GetValueOrDefault(), false);
                foreach (var movimento in movimentiEconomici)
                {
                    if (ripartizione.UnitaImmobiliari != null)
                    {
                        var key = ripartizioneSpeseService.GetKey(movimento);
                        if (ripartizione.Lotti.ContainsKey(key) && getListaModificata(ripartizione.Lotti[key]))
                            ripartizioneSpeseService.SetLottiDataSource(key, ripartizione.Lotti[key]);
                        if (ripartizione.Stabili.ContainsKey(key) && getListaModificata(ripartizione.Stabili[key]))
                            ripartizioneSpeseService.SetStabiliDataSource(key, ripartizione.Stabili[key]);
                        if (ripartizione.Gruppi.ContainsKey(key) && getListaModificata(ripartizione.Gruppi[key]))
                            ripartizioneSpeseService.SetGruppiDataSource(key, ripartizione.Gruppi[key]);
                        if(ripartizione.UnitaImmobiliari.ContainsKey(key))
                            ripartizioneSpeseService.SetUnitaDataSource(key, ripartizione.UnitaImmobiliari[key]);
                    }
                }
                ISet<MovimentoContabile> movimenti = new HashSet<MovimentoContabile>();
                foreach (var movimento in containerMovimenti.Movimenti.Where(movimento => movimento.IsEconomico()))
                {
                    movimenti.Add(movimento);
                }

                var modello = ripartizioneSpeseService.CreateModelloRipartizione(esercizio.CondominioRiferimento.ID, movimenti, importo, ripartizione.NomeModello, ripartizione.DescrizioneVoceSpesa);
                daoFactory.GetModelloRegistrazioneContabileDao().SaveOrUpdate(modello);
                return modello;
            }

            return null;
        }
예제 #16
0
        private string getStabiliAddebito(RipartizioneSpeseDTO ripartizione, string key)
        {
            string stabiliAddebito = string.Empty;

            // ==================================================================
            //  Controllo se la spesa è stata addebitata solo ad alcuni stabili
            // ==================================================================
            var stabili = ripartizione.Stabili[key];
            var isStabilePersonalizzato = false;
            foreach (var t in stabili)
            {
                if (!t.Selezionato)
                    isStabilePersonalizzato = true;
                else
                    stabiliAddebito += t.ID + "&";
            }

            // ==================================================================
            //  Controllo se la spesa è stata addebitata solo ad alcuni lotti
            // ==================================================================
            if (!isStabilePersonalizzato)
            {
                var lotti = ripartizione.Stabili[key];
                var isLottoPersonalizzato = false;
                foreach (var t in lotti)
                {
                    if (!t.Selezionato)
                        isLottoPersonalizzato = true;
                }
                if (isLottoPersonalizzato)
                {
                    var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                    for (var i = 0; i < lotti.Length; i++)
                    {
                        if (lotti[i].Selezionato)
                        {
                            var esercizio = daoFactory.GetEsercizioDao().GetById(ripartizione.Testata.IdEsercizio.GetValueOrDefault(), false);
                            stabiliAddebito = esercizio.CondominioRiferimento.Palazzine.Aggregate(stabiliAddebito, (current, stabile) => current + (stabile.ID.ToString() + "&"));
                        }
                    }
                }
                else
                    stabiliAddebito = null;
            }

            stabiliAddebito = !string.IsNullOrEmpty(stabiliAddebito) ? stabiliAddebito.Substring(0, stabiliAddebito.Length - 1) : null;

            return stabiliAddebito;
        }
        private void btnRipartoClick(object sender, EventArgs e)
        {
            if (ripartizioneDettaglio.ActiveRow != null)
            {
                var movimento = (MovimentoContabileDTO) ripartizioneDettaglio.ActiveRow.ListObject;
                setRipartizioneMovimento(movimento);

                var conto = getConto(ripartizioneDettaglio.ActiveRow.Cells["IdConto"]);
                if (conto != null)
                {
                    var readOnly = false;
                    if (ParentForm != null)
                    {
                        var updatableStandardForm = ParentForm as UpdatableStandardForm;
                        if (updatableStandardForm != null)
                            readOnly = !(updatableStandardForm).IsEditingMode;
                    }

                    var ripartizioneSave = ObjectCopier.CloneWcf(_ripartizione);
                    if(ripartizioneSave != null)
                    {
                        var form = getRipartizioneMovimentoUIService().GetRegistrazioneMovimento(ripartizioneSave, getMovimentoContabileService().GetKey(movimento), movimento, _esercizio, movimento.Importo.GetValueOrDefault(), readOnly);
                        if (form.ShowDialog() == DialogResult.OK)
                        {
                            _ripartizione = getRipartizioneMovimentoUIService().GetRipartizione();
                            if (getRipartizioneMovimentoUIService().IsDirty)
                                modelloRipartizione.Value = null;
                        }
                        form.Dispose();
                    }
                    else
                    {
                        _log.WarnFormat("ATTENZIONE: Ripartizione a NULL - {0}", Utility.GetMethodDescription());
                    }
                }
            }
            else
                CommonMessages.DisplayWarning("Per entrare nel riparto occorre scegliere un movimento.");
        }
예제 #18
0
        public RipartizioneSpeseDTO GetRipartizioneByMovimento(MovimentoContabileDTO movimento, int idEsercizio, RipartizioneSpeseDTO ripartizione)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            var esercizio = daoFactory.GetEsercizioDao().Find(idEsercizio, false);
            if(esercizio == null)
                return new RipartizioneSpeseDTO();

            var ripartizioneSpeseService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IRipartizioneSpeseService>();

            try
            {
                var key = ripartizioneSpeseService.GetKey(movimento);

                string listaModificata;
                var defaultSelezionato = true;
                if (ripartizione != null)
                {
                    listaModificata = getInstanceModificata(ripartizione, key);
                    clearFlag(ripartizione, key);

                    switch (listaModificata)
                    {
                        case "L":
                            ripartizioneSpeseService.SetLottiDataSource(key, ripartizione.Lotti[key]);
                            defaultSelezionato = false;
                            break;

                        case "S":
                            ripartizioneSpeseService.SetStabiliDataSource(key, ripartizione.Stabili[key]);
                            defaultSelezionato = false;
                            break;

                        case "G":
                            ripartizioneSpeseService.SetGruppiDataSource(key, ripartizione.Gruppi[key]);
                            defaultSelezionato = false;
                            break;

                        case "U":
                            ripartizioneSpeseService.SetUnitaDataSource(key, ripartizione.UnitaImmobiliari[key]);
                            defaultSelezionato = true;
                            break;

                        default:
                            if(ripartizione.UnitaImmobiliari.ContainsKey(key))
                                ripartizioneSpeseService.SetUnitaDataSource(key, ripartizione.UnitaImmobiliari[key]);
                            break;
                    }
                }
                else
                {
                    ripartizione = new RipartizioneSpeseDTO
                    {
                        Testata = new TestataMovimentoContabileDTO
                        {
                            DataRegistrazione = DateTime.Today,
                            IdEsercizio = idEsercizio,
                            IsAbilitataArchiviazioneOttica = false
                        }
                    };
                    ripartizione.Testata.IsAbilitataArchiviazioneOttica = esercizio.CondominioRiferimento.IsAbilitataArchiviazioneOtticaPassivi ?? esercizio.CondominioRiferimento.Azienda.IsAbilitataArchiviazioneOtticaPassivi;

                    listaModificata = "X";
                }

                if (!ripartizione.UnitaImmobiliari.ContainsKey(key) || listaModificata != string.Empty)
                {
                    if (movimento.IdConto == null)
                    {
                        _log.WarnFormat("ATTENZIONE: Trovato movimento con conto a null - {0} - movimento:{1} - esercizio:{2}", Library.Utility.GetMethodDescription(), movimento.ID, idEsercizio);
                    }
                    else
                    {
                        ripartizione.UnitaImmobiliari[key] = getListaUnitaDto(ripartizioneSpeseService.GetUnitaDataSource(key, movimento.IdConto, esercizio.CondominioRiferimento.ID, defaultSelezionato, esercizio, true), daoFactory.GetContoDao().GetById(movimento.IdConto.Value, false));
                        ripartizione.Lotti[key] = getListaDto(ripartizioneSpeseService.GetLottiDataSource(key, movimento.IdConto, esercizio.CondominioRiferimento.ID, null, defaultSelezionato));
                        ripartizione.Stabili[key] = getListaDto(ripartizioneSpeseService.GetStabiliDataSource(key, movimento.IdConto, esercizio.CondominioRiferimento.ID, null, defaultSelezionato));
                        ripartizione.Gruppi[key] = getListaDto(ripartizioneSpeseService.GetGruppiDataSource(key, movimento.IdConto, esercizio.CondominioRiferimento.ID, null, defaultSelezionato));
                    }
                }
 
                return ripartizione;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel caricamento delle ripartizioni spese - {0} - movimento:{1} - esercizio:{2}", ex, Library.Utility.GetMethodDescription(), movimento.ID, idEsercizio);
                throw;
            }
        }
        private RipartizioneSpeseDTO getRipartizione()
        {
            try
            {
                var ripartizione = new RipartizioneSpeseDTO { Testata = _testata };
                if (ripartizione.Testata == null && _esercizio != null)
                    ripartizione.Testata = new TestataMovimentoContabileDTO { IdEsercizio = _esercizio.ID };
                return ripartizione;
            }
            catch (Exception ex)
            {
                var idMovimento = string.Empty;
                if (_movimentoAvere != null)
                    idMovimento = _movimentoAvere.ID.ToString();

                var idEsercizio = string.Empty;
                if (_esercizio != null)
                    idEsercizio = _esercizio.ID.ToString();

                
                _log.Error("Errore inaspettato durante il get della ripartizione - " + Utility.GetMethodDescription() + " - movimento:" + idMovimento + " - esercizio:" + idEsercizio, ex);

                throw;
            }
        }
예제 #20
0
        private string getLottiAddebito(RipartizioneSpeseDTO ripartizione, string key)
        {
            var lottiAddebito = string.Empty;

            // ==================================================================
            //  Controllo se la spesa è stata addebitata solo ad alcuni lotti
            // ==================================================================
            var lotti = ripartizione.Lotti[key];
            var isLottoPersonalizzato = false;
            foreach (var t in lotti)
            {
                if (!t.Selezionato)
                    isLottoPersonalizzato = true;
                else
                    lottiAddebito += t.ID + "&";
            }

            if (isLottoPersonalizzato && !string.IsNullOrEmpty(lottiAddebito))
                lottiAddebito = lottiAddebito.Substring(0, lottiAddebito.Length - 1);
            else
                lottiAddebito = null;

            return lottiAddebito;
        }
        public int? ConfermaMovimento()
        {
            int? result = null;

            if (_movimentoAvere != null)
            {
                try
                {
                    movimentoValidationSummary.Validate();
                    if (movimentoValidationSummary.IsValid)
                    {
                        if (salvaModello.Checked)
                        {
                            try
                            {
                                var form = new SalvataggioModelloRegistrazioneContabile((List<ModelloRegistrazioneContabileDTO>)modelliContabiliBindingSource.DataSource, modelloRipartizione.Text);
                                if (form.ShowDialog() == DialogResult.Cancel)
                                    return null;

                                if (_ripartizione == null)
                                    _ripartizione = getRipartizione();
                                _ripartizione.NomeModello = form.Nome;
                                form.Dispose();
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore non previsto nel salvataggio del modello - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                            }
                        }

                        _movimentoAvere.Importo = getImportoMovimento();

                        try
                        {
                            if (causale.SelectedItem != null && causale.SelectedItem.ListObject != null)
                                _movimentoAvere.Causale = (CausaleContabileDTO)causale.SelectedItem.ListObject;
                            else
                            {
                                _log.ErrorFormat("Causale non presente - {0} - movimento:{1}", Utility.GetMethodDescription(), _movimentoAvere.ID);
                                return null;
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore non previsto nella impostazione della causale - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                            throw;
                        }

                        try
                        {
                            if (contoPatrimoniale.Value != null)
                                _movimentoAvere.IdConto = (int)contoPatrimoniale.Value;
                            else
                            {
                                _log.ErrorFormat("Conto non presente - {0} - movimento:{1}", Utility.GetMethodDescription(), _movimentoAvere.ID);
                                return null;
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore non previsto nella impostazione del conto patrimoniale - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                            throw;
                        }
                        
                        if (sottoContoPatrimoniale.Value != null)
                            _movimentoAvere.IdSottoConto = (int) sottoContoPatrimoniale.Value;

                        if (_ripartizione == null)
                            _ripartizione = getRipartizione();

                        if (_ripartizione.Testata != null)
                        {
                            try
                            {
                                var idEsercizio = esercizi.Value as int?;
                                var condominio = sceltaCondominioCombo1.CondominioSelected;
                                if (condominio.Esercizi.Any(item => item.ID == idEsercizio.GetValueOrDefault()))
                                {
                                    _ripartizione.Testata.IsAbilitataArchiviazioneOttica = archiviazioneOttica.Checked;
                                    _ripartizione.Testata.DataRegistrazione = dataRegistrazione.DateTime;
                                    _ripartizione.Testata.Note = noteDettaglio.Text;
                                    _ripartizione.Testata.IdEsercizio = esercizi.Value as int?;

                                    if (modelloRipartizione.Value != null)
                                        _ripartizione.Testata.IdModelloRipartizione = (int)modelloRipartizione.Value;

                                    _ripartizione.Testata.DataInizioCompetenza = null;
                                    _ripartizione.Testata.DataFineCompetenza = null;
                                    if (dataInizioCompetenza.Value != null)
                                        _ripartizione.Testata.DataInizioCompetenza = dataInizioCompetenza.DateTime;
                                    if (dataFineCompetenza.Value != null)
                                        _ripartizione.Testata.DataFineCompetenza = dataFineCompetenza.DateTime;
                                }
                                else
                                {
                                    _log.FatalFormat("ATTENZIONE: Esercizio del movimento contabile non presente nel condominio selezionato - {0} - movimento:{1} - esercizio:{2} - condominio:{3} - azienda:{4}", Utility.GetMethodDescription(), _movimentoAvere?.ID.ToString(), idEsercizio, sceltaCondominioCombo1.CondominioSelected.ID, Login.Instance.CurrentLogin().Azienda);
                                    CommonMessages.DisplayWarning("Il movimento non può essere aggiornato, si prega di riprovare");
                                    ParentForm?.Close();
                                    return null;
                                }

                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore non previsto nella impostazione dei dati di testata - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                                throw;
                            }
                        }
                        else
                        {
                            _log.ErrorFormat("TESTATA non presente - {0} - movimento:{1}", Utility.GetMethodDescription(), _movimentoAvere.ID);
                            return null;
                        }

                        _ripartizione.Descrizione = descrizioneDettaglio.Text;

                        try
                        {
                            if (sceltaFornitoreCombo1.Visible && sceltaFornitoreCombo1.SelectedFornitore != null)
                                _movimentoAvere.IdFornitore = sceltaFornitoreCombo1.SelectedFornitore.ID;
                            else if (sceltaFornitoreSottocontoCombo.Visible && sceltaFornitoreSottocontoCombo.SelectedFornitore != null)
                                _movimentoAvere.IdFornitore = sceltaFornitoreSottocontoCombo.SelectedFornitore.ID;
                            else
                                _movimentoAvere.IdFornitore = null;
                            foreach (var movimento in _movimentiDare)
                                movimento.IdFornitore = _movimentoAvere.IdFornitore;
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore non previsto nella impostazione dei dati del fornitore - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                            throw;
                        }

                        SpesaInfoDTO info;
                        try
                        {
                            // Controllo aggiuntivo per bugid#8602
                            if ((_ripartizione.Testata.ID == 0 || _ripartizione.Testata.Stato == "I") && !_isInserimento)
                            {
                                _log.FatalFormat("ATTENZIONE: Possibilità di movimento doppio - {0} - movimento:{1} - azienda:{2}", Utility.GetMethodDescription(), _movimentoAvere?.ID.ToString() ?? "<NULL>", Login.Instance.CurrentLogin().Azienda);
                                CommonMessages.DisplayWarning("Il movimento non può essere aggiornato, si prega di riprovare");
                                ParentForm?.Close();
                                return null;
                            }
                            else
                            {
                                info = getMovimentoContabileService().Salva(_ripartizione, _movimentoAvere, _movimentiDare, _idMovimentoBancario);
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore non previsto nell'inserimento del movimento economico - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                            info = new SpesaInfoDTO {Message = "Errore imprevisto nell'inserimento del movimento"};
                        }

                        if (string.IsNullOrEmpty(info.Message))
                        {
                            try
                            {
                                _movimentoAvere.ID = info.Id;
                                result = info.Id;

                                CommonMessages.DisplayComplete("Il movimento contabile è stato correttamente inserito." + Environment.NewLine + "Sul documento deve essere riportato: " + info.IdentificativoArchiviazione);
                                OnAfterUpdate(_ripartizione.Testata != null ? new AfterUpdateArgs(_ripartizione.Testata.ID) : new AfterUpdateArgs(0));

                                _movimentoResult = _movimentoAvere;

                                if (salvaModello.Checked)
                                {
                                    try
                                    {
                                        getModelloContabileService().Reload(_esercizio);
                                        modelliContabiliBindingSource.DataSource = getModelloContabileService().GetByEsercizio(_esercizio);
                                    }
                                    catch (Exception ex)
                                    {
                                        _log.ErrorFormat("Errore non previsto nel CARICAMENTO DEL DATASOURCE DEL MODELLO - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore non previsto nel FEEDBACK della conferma del movimento - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                                throw;

                            }

                            clearAllFields();
                        }
                        else
                            CommonMessages.DisplayWarning("Si sono verificati dei problemi nell'aggiornamento del movimento:" + Environment.NewLine + info.Message + Environment.NewLine + "Si prega di riprovare.");
                    }
                    else
                        movimentoValidationSummary.ShowErrorSummary();
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore non previsto nella conferma del movimento - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                }
            }

            return result;
        }
예제 #22
0
 public RipartizioneSpeseDTO GetRipartizioneByMovimentiEsistenti(IList<MovimentoContabileDTO> movimentoDto, int idEsercizio, RipartizioneSpeseDTO ripartizione)
 {
     return movimentoDto.Aggregate(ripartizione, (current, movimentoContabileDTO) => GetRipartizioneByMovimentoEsistente(movimentoContabileDTO, idEsercizio, current));
 }
        private void modelloRipartizioneSelectionChanged(object sender, EventArgs e)
        {
            try
            {
                // Se non ho scelto la causale non posso applicare il modello
                if (causale.Value == null)
                {
                    modelloRipartizione.SelectionChanged -= modelloRipartizioneSelectionChanged;
                    modelloRipartizione.Value = null;
                    modelloRipartizione.SelectionChanged += modelloRipartizioneSelectionChanged;
                }
                else
                    _causale = (CausaleContabileDTO)causale.SelectedItem.ListObject;

                if (modelloRipartizione.Value != null && modelloRipartizione.Value != DBNull.Value)
                {
                    TestataMovimentoContabileDTO testata = null;
                    if (_ripartizione != null)
                        testata = _ripartizione.Testata;
                    _ripartizione = getMovimentoContabileService().GetRipartizioneByModello(_esercizio.ID, testata, (int)modelloRipartizione.Value, _causale.ID, getImportoMovimento(), _tipoMovimento);
                    _testata = _ripartizione.Testata;

                    // -------------------------------------------------------------------------
                    //  Se siamo in inserimento prendo tutti i movimenti ...
                    //  ... altrimenti devo scartare quelli "avere"
                    // ------------------------------------------------------------------------
                    _movimentiDare = _isInserimento ? _ripartizione.Testata.Movimenti : getMovimentoContabileService().GetMovimentiLista(_ripartizione.Testata);
                    movimentoContabileBindingSource.DataSource = _movimentiDare;

                    // Gruppo soggetti
                    if(ripartizioneDettaglio.Rows.Count > 0)
                        ripartizioneDettaglio.ActiveRow = ripartizioneDettaglio.Rows[0];

                    foreach (var row in ripartizioneDettaglio.Rows)
                        setSottoContoValueList(row);

                    if (!_confirmByParent)
                        btnConferma.Visible = true;
                    btnRicevuta.Visible = true;

                    salvaModello.Enabled = false;
                    salvaModello.Checked = false;

                    setDettaglioResiduo();
                }
                else
                {
                    if (_ripartizione != null && _ripartizione.Testata != null)
                        _ripartizione.Testata.IdModelloRipartizione = null;
                }

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nella scelta del modello - {0} - modello:{1} - testata:{2} - esercizio:{3} - formGestione:{4}", ex, Utility.GetMethodDescription(), modelloRipartizione.Value, _testata != null ? _testata.ID.ToString() : "<NULL>", _esercizio != null ? _esercizio.ID.ToString() : "<NULL>", _formGestione != null ? _formGestione.Name : "<NULL>");
            }

        }
예제 #24
0
        public RipartizioneSpeseDTO GetRipartizioneByMovimentoEsistente(MovimentoContabileDTO movimentoDto, int idEsercizio, RipartizioneSpeseDTO ripartizione, int? idContoDetrazione = null)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            var esercizio = daoFactory.GetEsercizioDao().GetById(idEsercizio, false);
            var ripartizioneSpeseService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IRipartizioneSpeseService>();
            var repTestata = new TestataMovimentoContabileRepository(_info, _windsorRepository, null);

            IRipartizioneSpesa movimento = null;
            if (movimentoDto.Stato == "RIPARTIZIONE")
                movimento = daoFactory.GetRipartizioneSpesaDao().Find(movimentoDto.ID, false); 
            else
                movimento = daoFactory.GetMovimentoContabileDao().Find(movimentoDto.ID, false);
            
            var movimentoContabile = movimento as MovimentoContabile;
            if(movimento != null)
            {
                try
                {
                    var key = ripartizioneSpeseService.GetKey(movimentoDto);

                    if (ripartizione == null)
                        ripartizione = new RipartizioneSpeseDTO();

                    if (movimentoContabile != null)
                    {
                        key = ripartizioneSpeseService.GetKey(movimentoContabile);
                        if (movimentoContabile.Testata != null)
                            ripartizione.Testata = repTestata.GetByDomainEntity(movimentoContabile.Testata);
                    }
                    else if (movimentoDto.Stato != "RIPARTIZIONE")
                    {
                        _log.ErrorFormat("Trovato movimento contabile senza testata associata - {0} - id:{1}", Library.Utility.GetMethodDescription(), movimento.ID);
                    }

                    // -----------------------------------------------
                    // Recupero eventuali filtri di selezione
                    // -----------------------------------------------
                    // Gruppi
                    int[] gruppiSelezionati = null;
                    if (!string.IsNullOrEmpty(movimento.GruppiAddebito))
                    {
                        var gruppiAddebito = movimento.GruppiAddebito.Split('&');
                        gruppiSelezionati = new int[gruppiAddebito.Length];
                        for (var i = 0; i < gruppiAddebito.Length; i++)
                        {
                            if (!string.IsNullOrEmpty(gruppiAddebito[i]))
                                gruppiSelezionati[i] = int.Parse(gruppiAddebito[i]);
                        }
                    }

                    // Lotti
                    int[] lottiSelezionati = null;
                    if (!string.IsNullOrEmpty(movimento.LottiAddebito))
                    {
                        string[] lottiAddebito = movimento.LottiAddebito.Split('&');
                        lottiSelezionati = new int[lottiAddebito.Length];
                        for (var i = 0; i < lottiAddebito.Length; i++)
                        {
                            if (!string.IsNullOrEmpty(lottiAddebito[i]))
                                lottiSelezionati[i] = int.Parse(lottiAddebito[i]);
                        }
                    }

                    // Stabili
                    int[] stabiliSelezionati = null;
                    if (!string.IsNullOrEmpty(movimento.StabiliAddebito))
                    {
                        var stabiliAddebito = movimento.StabiliAddebito.Split('&');
                        stabiliSelezionati = new int[stabiliAddebito.Length];
                        for (var i = 0; i < stabiliAddebito.Length; i++)
                        {
                            if (!string.IsNullOrEmpty(stabiliAddebito[i]))
                                stabiliSelezionati[i] = int.Parse(stabiliAddebito[i]);
                        }
                    }

                    if (movimentoContabile == null || movimentoContabile.Testata != null)
                    {
                        var conto = daoFactory.GetContoDao().Find(movimentoDto.IdConto.GetValueOrDefault(), false);
                        if (conto != null)
                        {
                            Conto contoDetrazione = null;
                            if (idContoDetrazione != null)
                            {
                                contoDetrazione = daoFactory.GetContoDao().Find(idContoDetrazione.GetValueOrDefault(), false);
                                conto = contoDetrazione;
                            }

                            ripartizione.UnitaImmobiliari[key] = getListaUnitaDto(ripartizioneSpeseService.GetUnitaDataSourceByMovimento(key, movimento, contoDetrazione), conto);
                            ripartizione.Lotti[key] = getListaDto(ripartizioneSpeseService.GetLottiDataSource(key, movimentoDto.IdConto, esercizio.CondominioRiferimento.ID, lottiSelezionati));
                            ripartizione.Stabili[key] = getListaDto(ripartizioneSpeseService.GetStabiliDataSource(key, movimentoDto.IdConto, esercizio.CondominioRiferimento.ID, stabiliSelezionati));
                            ripartizione.Gruppi[key] = getListaDto(ripartizioneSpeseService.GetGruppiDataSource(key, movimentoDto.IdConto, esercizio.CondominioRiferimento.ID, gruppiSelezionati));
                        }
                    }

                    return ripartizione;
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nel caricamento delle ripartizioni spese - {0}", ex, Library.Utility.GetMethodDescription());
                    throw;
                }                
            }

            return ripartizione;
        }
 public Form GetRegistrazioneMovimento(RipartizioneSpeseDTO ripartizione, string key, MovimentoContabileDTO movimentoContabileDTO, EsercizioDTO esercizioDTO, decimal importo, bool readOnly)
 {
     _form = new RipartizioneMovimentoUI(ripartizione, key, movimentoContabileDTO, esercizioDTO, importo, readOnly);
     return _form;
 }
예제 #26
0
        public RipartizioneSpeseDTO GetRipartizioneByModello(int idEsercizio, int idTestataMovimentoContabile, int idModello, int idCausale, decimal importo, TipoMovimentoEnum tipo)
        {

            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            var ripartizioneSpeseService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IRipartizioneSpeseService>();

            var testataRep = new TestataMovimentoContabileRepository(_info, _windsorRepository, null);
            var ripartizione = new RipartizioneSpeseDTO();
            try
            {
                var testata = daoFactory.GetTestataMovimentoContabileDao().Find(idTestataMovimentoContabile, false);
                if (testata != null)
                    ripartizioneSpeseService.ApplyModello(testata, idModello, importo, tipo, false);
                else
                    testata = ripartizioneSpeseService.ApplyModello(idEsercizio, idModello, idCausale, importo, tipo, false);

                if(testata != null)
                    ripartizione.Testata = testataRep.GetByDomainEntity(testata);
                else
                    _log.WarnFormat("Testata a NULL - {0} - esercizio:{1} - modello:{2} - testataMovimentoContabile:{3}", Library.Utility.GetMethodDescription(), idEsercizio, idModello, idTestataMovimentoContabile);

                return ripartizione;

                // --------------------------------------
                // Lotti
                // --------------------------------------
                var esercizio = daoFactory.GetEsercizioDao().GetById(idEsercizio, false);
                var lotti = new Dictionary<string, BusinessInstanceSelectedDTO[]>(testata.Movimenti.Count);
                foreach (var movimento in testata.Movimenti)
                {
                    var key = ripartizioneSpeseService.GetKey(movimento);
                    var tbLotti = ripartizioneSpeseService.GetLottiDataSource(key, movimento.ContoRiferimento.ID, esercizio.CondominioRiferimento.ID, null);
                    lotti.Add(key, getListaDto(tbLotti)); 
                }
                ripartizione.Lotti = lotti;

                // --------------------------------------
                // Stabili
                // --------------------------------------
                var stabili = new Dictionary<string, BusinessInstanceSelectedDTO[]>(testata.Movimenti.Count);
                foreach (var movimento in testata.Movimenti)
                {
                    string key = ripartizioneSpeseService.GetKey(movimento);
                    var tbStabili = ripartizioneSpeseService.GetStabiliDataSource(key, movimento.ContoRiferimento.ID, esercizio.CondominioRiferimento.ID, null);
                    stabili.Add(key, getListaDto(tbStabili));
                }
                ripartizione.Stabili = stabili;

                // --------------------------------------
                // Gruppi
                // --------------------------------------
                var gruppi = new Dictionary<string, BusinessInstanceSelectedDTO[]>(testata.Movimenti.Count);
                foreach (var movimento in testata.Movimenti)
                {
                    var key = ripartizioneSpeseService.GetKey(movimento);
                    var tbGruppi = ripartizioneSpeseService.GetGruppiDataSource(key, movimento.ContoRiferimento.ID, esercizio.CondominioRiferimento.ID, null);
                    gruppi.Add(key, getListaDto(tbGruppi));
                }
                ripartizione.Gruppi = gruppi;
                
                // --------------------------------------
                // Unità Immobiliari
                // --------------------------------------
                var unita = new Dictionary<string, UnitaImmobiliareSelectedDTO[]>(testata.Movimenti.Count);
                foreach (var movimento in testata.Movimenti)
                {
                    var key = ripartizioneSpeseService.GetKey(movimento);
                    var tbUnita = ripartizioneSpeseService.GetUnitaDataSource(key, movimento.ContoRiferimento.ID, esercizio.CondominioRiferimento.ID, testata.EsercizioRiferimento);

                    unita.Add(key, getListaUnitaDto(tbUnita, movimento.ContoRiferimento));
                }
                ripartizione.UnitaImmobiliari = unita;

                return ripartizione;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel caricamento delle ripartizioni spese - {0} - esercizio:{1} - modello:{2} - testataMovimentoContabile:{3}", ex, Library.Utility.GetMethodDescription(), idEsercizio, idModello, idTestataMovimentoContabile);
                throw;
            }
        }
예제 #27
0
 private void setCurrentRipartizione(RipartizioneSpeseDTO ripartizione)
 {
     _ripartizione[(DettaglioSpesaDTO)dettagliSpesa.SelectedTab.Tag] = ripartizione;
 }
예제 #28
0
        public SpesaInfoDTO SalvaMovimento(RipartizioneSpeseDTO ripartizione, MovimentoContabileDTO movimentoAvere, List<MovimentoContabileDTO> movimentiDare, int? idMovimentoBancario)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            var movimentoContabileService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMovimentiContabiliService>();
            var ripartizioneSpeseService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IRipartizioneSpeseService>();
            var protocolloService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IProtocolloService>();
            var archiviazioneService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IArchiviazioneOtticaService>();
            var persistenceContextService = _windsorRepository.GetContainer(_info.Azienda).Resolve<Data.IPersistenceContext>();

            var index = 0;
            movimentoAvere.NumeroRiga = index+1;
            movimentoAvere.Descrizione = ripartizione.Descrizione;

            if (movimentoAvere.Importo > 0)
                movimentoAvere.Segno = "A";
            else
            {
                movimentoAvere.Segno = "D";
                movimentoAvere.Importo = movimentoAvere.Importo * -1;
            }

            int? idEsercizio = null;
            try
            {
                var esercizio = daoFactory.GetEsercizioDao().GetById(ripartizione.Testata.IdEsercizio.GetValueOrDefault(), true);

                if (esercizio.Stato == StatoEsercizioEnum.Aperto)
                {
                    idEsercizio = esercizio.ID;
                    var numeroRegistrazione = esercizio.ProgressivoRegistrazioneContabile;
                    ripartizione.Testata.Movimenti = new MovimentoContabileDTO[movimentiDare.Count + 1];
                    ripartizione.Testata.Movimenti[0] = movimentoAvere;
                    numeroRegistrazione++;
                    movimentoAvere.NumeroRegistrazione = numeroRegistrazione;

                    // Salvo eventuali valori del movimento patrimoniale originale
                    if(movimentoAvere.ID > 0)
                    {
                        var movimento = daoFactory.GetMovimentoContabileDao().Find(movimentoAvere.ID, false);
                        if (movimento?.EvasioneBancaria != null)
                            movimentoAvere.IdEvasione = movimento.EvasioneBancaria.ID;
                    }

                    if (!(ripartizione.Testata.IdModelloRipartizione > 0))
                    {
                        foreach (var movimentoEconomico in movimentiDare)
                        {
                            index++;
                            numeroRegistrazione++;

                            if (movimentoEconomico.Importo < 0)
                            {
                                movimentoEconomico.Importo = movimentoEconomico.Importo*-1;
                                movimentoEconomico.Segno = "A";
                            }
                            else
                                movimentoEconomico.Segno = "D";

                            movimentoEconomico.IsMovimentoEconomico = true;
                            movimentoEconomico.NumeroRegistrazione = numeroRegistrazione;
                            movimentoEconomico.Causale = movimentoAvere.Causale;
                            movimentoEconomico.IdFornitore = movimentoAvere.IdFornitore;
                            if (string.IsNullOrEmpty(movimentoEconomico.Descrizione) && !esercizio.CondominioRiferimento.DescrizioneSpeseAutomatica)
                                movimentoEconomico.Descrizione = ripartizione.Descrizione;
                            movimentoEconomico.IdTestata = ripartizione.Testata.ID;
                            ripartizione.Testata.Movimenti[index] = movimentoEconomico;

                            // ---------------------------------------------------------------------
                            // Aggiorno addebiti per lotto, stabile o scala
                            // ---------------------------------------------------------------------
                            var spesePersonali = false;
                            if (movimentoEconomico.ID > 0)
                            {
                                var movimento = daoFactory.GetMovimentoContabileDao().Find(movimentoEconomico.ID, false);
                                if (movimento != null)
                                {
                                    movimentoEconomico.LottiAddebito = movimento.LottiAddebito;
                                    movimentoEconomico.StabiliAddebito = movimento.StabiliAddebito;
                                    movimentoEconomico.GruppiAddebito = movimento.GruppiAddebito;
                                    spesePersonali = movimento.ContoRiferimento.IsSpesePersonali;
                                }
                            }

                            // ---------------------------------------------------------------------
                            //  Verifico se è stata eseguita una ripartizione personalizzata
                            // ---------------------------------------------------------------------
                            var key = ripartizioneSpeseService.GetKey(movimentoEconomico);

                            movimentoEconomico.IsRipartoPersonalizzato = false;

                            // Lasciare la valorizzazione di NumeroRiga DOPO il GetKey altrimenti la chiave NON viene trovata per i movimenti con più di 1 conto economico
                            movimentoEconomico.NumeroRiga = index + 1;

                            if (ripartizione.UnitaImmobiliari != null && ripartizione.UnitaImmobiliari.ContainsKey(key))
                            {
                                movimentoEconomico.LottiAddebito = getLottiAddebito(ripartizione, key);
                                movimentoEconomico.StabiliAddebito = getStabiliAddebito(ripartizione, key);
                                movimentoEconomico.GruppiAddebito = getGruppiAddebito(ripartizione, key);

                                var unita = ripartizione.UnitaImmobiliari[key];
                                var isPersonalizzato = unita.Count(item => item.Selezionato) < unita.Length;

                                // Considero il movimento come ripartito personalmente se non sono presenti specifici riparti per lotto, stabile o scala e non si tratta di un conto di spese personali
                                if (isPersonalizzato && !spesePersonali && string.IsNullOrEmpty(movimentoEconomico.LottiAddebito) && string.IsNullOrEmpty(movimentoEconomico.StabiliAddebito) && string.IsNullOrEmpty(movimentoEconomico.GruppiAddebito))
                                    movimentoEconomico.IsRipartoPersonalizzato = true;
      
                                var conto = daoFactory.GetContoDao().GetById(movimentoEconomico.IdConto.Value, false);
                                if (conto.IsSpesePersonali || movimentoEconomico.IsRipartoPersonalizzato)
                                {
                                    movimentoEconomico.DettaglioRipartizione = new SpeseUnitaDTO[unita.Length];

                                    // -----------------------------------------------------------
                                    // Per le unità ricalcolo gli importi
                                    // -----------------------------------------------------------
                                    var instanceModificata = getInstanceModificata(ripartizione, key);
                                    if (!string.IsNullOrEmpty(instanceModificata) && instanceModificata != "U")
                                        GetRipartizioneByMovimento(movimentoEconomico, esercizio.ID, ripartizione);
                                    else
                                    {
                                        movimentoEconomico.DettaglioRipartizione = new SpeseUnitaDTO[movimentoEconomico.DettaglioRipartizione.Length];
                                        var unitaSelected = ripartizione.UnitaImmobiliari[key];
                                        for (var i = 0; i < unitaSelected.Length; i++)
                                        {
                                            if (unitaSelected[i].Selezionato)
                                            {
                                                var spesaUnitaDto = new SpeseUnitaDTO { ID = 0, IdMovimentoRiferimento = movimentoEconomico.ID, Importo = unitaSelected[i].Importo };
                                                if (unitaSelected[i].IdSoggettoCondominio > 0)
                                                    spesaUnitaDto.IdSoggetto = unitaSelected[i].IdSoggettoCondominio;
                                                else
                                                    spesaUnitaDto.IdUnitaRiferimento = unitaSelected[i].ID;
                                                movimentoEconomico.DettaglioRipartizione[i] = spesaUnitaDto;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                    // -------------------------------------------
                    // Elimino vecchia testata
                    // -------------------------------------------
                    int? oldProtocollo = null;
                    int? oldAnnoArchiviazione = null;
                    var oldTipoTestata = TipoTestataMovimentoContabileEnum.Undefined;
                    AddebitoCompetenza addebito = null;
                    var testataOld = daoFactory.GetTestataMovimentoContabileDao().Find(ripartizione.Testata.ID, false);
                    if (testataOld != null)
                    {
                        if (testataOld.AddebitoCompetenze.Count > 0)
                            addebito = Library.IesiGenericCollections<AddebitoCompetenza>.GetByIndex(testataOld.AddebitoCompetenze, 0);

                        oldProtocollo = testataOld.NumeroProtocollo;
                        oldAnnoArchiviazione = testataOld.AnnoArchiviazioneOttica;
                        testataOld.EsercizioRiferimento = null;

                        // ------------------------------------------------------------------------
                        //  Nel caso si tratti di un movimento generato automaticamente dalla procedura solleciti
                        //  elimino la relazione tra sollecito e movimento contabile.
                        //  Solo per le vecchie versioni di addebito competenze solleciti
                        // ------------------------------------------------------------------------
                        if (testataOld.Tipo == TipoTestataMovimentoContabileEnum.Automatica)
                        {
                            oldTipoTestata = testataOld.Tipo;

                            // per impostare correttamente la descrizione della testata
                            movimentoAvere.Descrizione = testataOld.Descrizione;

                            var solleciti = daoFactory.GetSollecitoDao().GetByTestataMovimentoContabile(testataOld.ID);
                            foreach (var sollecito in solleciti)
                                sollecito.MovimentoEconomico = null;

                            ripartizione.Testata.Tipo = testataOld.Tipo;
                        }

                        daoFactory.GetTestataMovimentoContabileDao().Delete(testataOld);

                        ripartizione.Testata.ID = 0;
                        foreach (var movDto in ripartizione.Testata.Movimenti)
                        {
                            if (movDto != null)
                                movDto.ID = 0;
                        }
                    }

                    // -------------------------------------------
                    // Creo nuova testata
                    // -------------------------------------------
                    var rep = new TestataMovimentoContabileRepository(_info, _windsorRepository, null);
                    var testata = rep.ManageDomainEntity(ripartizione.Testata);
                    if (testata == null || movimentoAvere == null)
                    {
                        if (testata == null)
                        {
                            _log.ErrorFormat("Errore inaspettato nel salvataggio (UPDATE) del movimento - TESTATA NULL - {0} - esercizio:{1} - azienda:{2}", Library.Utility.GetMethodDescription(), idEsercizio.GetValueOrDefault(), _info.Azienda);
                            persistenceContextService.RollbackAndCloseSession(Security.Login.Instance.CurrentLogin().LoginName);
                            persistenceContextService.BeginTransaction(Security.Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);
                            return new SpesaInfoDTO { Id = 0, NumeroProtocollo = 0, IdentificativoArchiviazione = null, StampaEtichettaArchiviazione = false, Message = "Errore inaspettato nel salvataggio del movimento, si prega di riprovare." };
                        }

                        if (movimentoAvere == null)
                        {
                            _log.ErrorFormat("Errore inaspettato nel salvataggio (UPDATE) del movimento - MOVIMENTO AVERE NULL - {0} - esercizio:{1} - azienda:{2}", Library.Utility.GetMethodDescription(), idEsercizio.GetValueOrDefault(), _info.Azienda);
                            persistenceContextService.RollbackAndCloseSession(Security.Login.Instance.CurrentLogin().LoginName);
                            persistenceContextService.BeginTransaction(Security.Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);
                            return new SpesaInfoDTO { Id = 0, NumeroProtocollo = 0, IdentificativoArchiviazione = null, StampaEtichettaArchiviazione = false, Message = "Errore inaspettato nel salvataggio del movimento, si prega di riprovare." };
                        }
                    }

                    testata.Descrizione = movimentoAvere.Descrizione;
                    if (oldProtocollo != null)
                        testata.NumeroProtocollo = oldProtocollo;
                    if (oldAnnoArchiviazione != null)
                        testata.AnnoArchiviazioneOttica = oldAnnoArchiviazione;
                    if (oldTipoTestata != TipoTestataMovimentoContabileEnum.Undefined)
                        testata.Tipo = oldTipoTestata;

                    // Aggiorno eventuali addebiti di competenze esistenti
                    if (addebito != null)
                    {
                        addebito.TestataMovimento = testata;
                        IList<MovimentoContabile> movimentiEconomici = testata.Movimenti.Where(item => item.IsEconomico()).ToList();
                        IList<DettaglioAddebitoCompetenza> dettagliAddebito = addebito.Dettaglio.ToList();
                        if (movimentiEconomici.Count == dettagliAddebito.Count)
                        {
                            for (var i = 0; i < dettagliAddebito.Count; i++)
                                dettagliAddebito[i].MovimentoContabile = movimentiEconomici[i];
                        }
                        else
                        {
                            throw new InvalidDataException("Non è possibile aggiornare direttamente un movimento contabile generato da un addebito di competenze");
                            //foreach (var dettaglioAddebito in addebito.Dettaglio)
                            //    dettaglioAddebito.MovimentoContabile = null;
                        }
                    }

                    // ======================================================================================
                    //  Evasione Movimenti
                    // ======================================================================================
                    if (idMovimentoBancario != null)
                    {
                        IList<MovimentoContabile> movimentiContabili = (from movimento in testata.Movimenti where !movimento.IsEconomico() select movimento).ToList();
                        IList<int> idMovimentiBancari = new List<int> {idMovimentoBancario.GetValueOrDefault()};
                        movimentoContabileService.EvadiMovimento($"Evasione automatica registrazione movimento contabile del {ripartizione.Testata.DataRegistrazione.GetValueOrDefault():d}", movimentiContabili, idMovimentiBancari, null, null);
                    }

                    // =====================================================================================================
                    //  Se presente applico il modello di ripartizione, altrimenti ricalcolo valori o l'intera ripartizione
                    // =====================================================================================================
                    if (ripartizione.Testata.IdModelloRipartizione > 0)
                    {
                        var tipo = TipoMovimentoEnum.Spesa;
                        if (movimentoAvere.Segno == "D")
                            tipo = TipoMovimentoEnum.Accredito;

                        // NON VIENE PIù RICALCOLATA LE RIPARTIZIONE, SARA' CALCOLATA IN FASE DI BILANCIO
                        ripartizioneSpeseService.ApplyModello(testata, ripartizione.Testata.IdModelloRipartizione.Value, movimentoAvere.Importo.Value, tipo, false);

                        // Ripristino le descrizioni precedenti se presenti
                        foreach (var dto in movimentiDare)
                        {
                            if (!string.IsNullOrEmpty(dto.Descrizione))
                            {
                                var movimento = (from item in testata.Movimenti
                                                 where item.NumeroRiga == dto.NumeroRiga
                                                 select item).SingleOrDefault();
                                if (movimento != null)
                                    movimento.Descrizione = dto.Descrizione;
                            }
                        }
                    }
                    else
                    {
                        // Salvataggio modello
                        testata.ModelloRipartizione = SalvaModelloRipartizioneContabile(ripartizione, testata, movimentiDare, movimentoAvere.Importo.Value);
                    }

                    // =====================================================================================================
                    // Salvataggio progressivo registrazione
                    // =====================================================================================================
                    esercizio.ProgressivoRegistrazioneContabile = numeroRegistrazione;

                    // =====================================================================================================
                    // Registrazione dell'eventuale arrotondamento
                    // =====================================================================================================
                    if (testata.Movimenti.FirstOrDefault() != null)
                        movimentoContabileService.SetMovimentoArrotondamento(null, testata, testata.Movimenti.FirstOrDefault().Causale, null);

                    // ======================================================================================
                    //  Recupero il numero di protocollo e l'identificativo di archiviazione
                    // ======================================================================================
                    int protocollo;
                    if (testata.NumeroProtocollo.GetValueOrDefault() == 0)
                    {
                        {
                            var progressivo = protocolloService.GetProgressivo(TipoProtocollo.Fattura,
                                esercizio.DataApertura.GetValueOrDefault().Year,
                                testata.EsercizioRiferimento.CondominioRiferimento);
                            if (progressivo.Progressivo != null)
                            {
                                protocollo = progressivo.Progressivo.Value;
                                testata.NumeroProtocollo = protocollo;
                                testata.AnnoArchiviazioneOttica = esercizio.DataApertura.GetValueOrDefault().Year;
                            }
                            else
                                return new SpesaInfoDTO
                                {
                                    Id = 0,
                                    IdentificativoArchiviazione = null,
                                    NumeroProtocollo = 0,
                                    StampaEtichettaArchiviazione = false,
                                    Message = progressivo.Message
                                };
                        }
                    }
                    else
                    {
                        protocollo = testata.NumeroProtocollo.Value;
                    }

                    var identificativoArchiviazione = archiviazioneService.GetIdentificativoArchiviazione(testata);

                    var movimentoPatrimoniale = (from item in testata.Movimenti
                                                 where item.NumeroRiga == movimentoAvere.NumeroRiga
                                                 select item).FirstOrDefault();
                    var idMovimentoPatrimoniale = 0;
                    if (movimentoPatrimoniale != null)
                        idMovimentoPatrimoniale = movimentoPatrimoniale.ID;

                    var impostazioni = daoFactory.GetImpostazioniAziendaDao().GetByAzienda(esercizio.CondominioRiferimento.Azienda.ID);
                    if (impostazioni == null)
                    {
                        impostazioni = new ImpostazioniAzienda(daoFactory.GetAziendaDao().GetById(esercizio.CondominioRiferimento.Azienda.ID, false));
                        daoFactory.GetImpostazioniAziendaDao().SaveOrUpdate(impostazioni);
                    }

                    var stampaEtichetta = false;
                    var etichettatrice = string.Empty;
                    var tipoEichetta = "Testo";
                    int? trayEtichettatriceAttivazioneOttica = null;
                    if (impostazioni != null)
                    {
                        stampaEtichetta = impostazioni.UtilizzoEtichettatriceArchiviazioneOtticaMovimenti && testata.IsAbilitataArchiviazioneOttica;
                        etichettatrice = impostazioni.EtichettatriceArchiviazioneOttica;
                        tipoEichetta = impostazioni.TipoEtichettaArchiviazioneOttica;
                        trayEtichettatriceAttivazioneOttica = impostazioni.TrayEtichettatriceAttivazioneOttica;
                    }

                    return new SpesaInfoDTO
                    {
                        Id = idMovimentoPatrimoniale,
                        NumeroProtocollo = testata.NumeroProtocollo.Value,
                        IdentificativoArchiviazione = identificativoArchiviazione,
                        StampaEtichettaArchiviazione = stampaEtichetta,
                        EtichettatriceArchiviazione = etichettatrice,
                        TipoEtichettaArchiviazione = tipoEichetta,
                        TrayEtichettatriceAttivazioneOttica = trayEtichettatriceAttivazioneOttica
                    };
                }
                return new SpesaInfoDTO
                {
                    Id = 0,
                    NumeroProtocollo = 0,
                    IdentificativoArchiviazione = null,
                    StampaEtichettaArchiviazione = false,
                    Message = "La registrazione non è possibile perchè relativo ad un esercizio chiuso."
                };
            }
            catch (Exception ex)
            {
                var message = ex.ToString().StartsWith("NHibernate.StaleObjectStateException") ? "Un altro utente ha confermato un movimento." : "Errore inaspettato nell'attribuzione del numero di registrazione, probabilmente determinato da un conflitto di aggiornamento";
                
                _log.ErrorFormat("Errore inaspettato nel salvataggio (UPDATE) del movimento - {0} - idMovimentoAvere:{1} - esercizio:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), movimentoAvere.ID, idEsercizio.GetValueOrDefault(), _info.Azienda);
                persistenceContextService.RollbackAndCloseSession(Security.Login.Instance.CurrentLogin().LoginName);
                persistenceContextService.BeginTransaction(Security.Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);
                return new SpesaInfoDTO { Id = 0, NumeroProtocollo = 0, IdentificativoArchiviazione = null, StampaEtichettaArchiviazione = false, Message = message };
            }

        }
예제 #29
0
        public SpesaInfoDTO Salva(SpesaDTO spesaDto, IDictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> listaRipartizione, bool isMultiIva)
        {
            try
            {
                var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                var movimentoContabileService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMovimentiContabiliService>();
                var ripartizioneSpeseService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IRipartizioneSpeseService>();
                var protocolloService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IProtocolloService>();
                var ripartizioneSpesa = new RipartizioneSpeseRepository(_info, _windsorRepository);

                // ------------------------------------------------------------
                // Verifico se il fornitore è presente
                // ------------------------------------------------------------
                var fornitore = daoFactory.GetFornitoreDao().Find(spesaDto.IdFornitore.GetValueOrDefault(), false);
                if (fornitore == null)
                {
                    return new SpesaInfoDTO { Id = 0, IdentificativoArchiviazione = null, NumeroProtocollo = 0, StampaEtichettaArchiviazione = false, Message = "Il fornitore non è più presente in archivio." };
                }

                // ------------------------------------------------------------
                // Prima di ogni modifica recupero i movimenti secondari
                // ------------------------------------------------------------
                IList<MovimentoContabile> movimentiSecondari = null;
                if (spesaDto.ID > 0)
                {
                    var spesa = daoFactory.GetSpesaDao().Find(spesaDto.ID, false);
                    if(spesa != null)
                        movimentiSecondari = ripartizioneSpeseService.GetMovimentiSecondari(spesa);
                }

                // ------------------------------------------------------------
                // Creo la ripartizione per ogni movimento
                // ------------------------------------------------------------
                foreach (var dettaglioDto in spesaDto.Dettagli)
                {
                    RipartizioneSpeseDTO ripartizione = null;
                    var dettaglio = ripartizioneSpesa.GetDettaglioDto(listaRipartizione, dettaglioDto.NumeroRiga.GetValueOrDefault());
                    if (dettaglio != null)
                    {
                        if (listaRipartizione.ContainsKey(dettaglio))
                            ripartizione = listaRipartizione[dettaglio];
                    }
                    if (ripartizione == null || ripartizione.UnitaImmobiliari == null)
                    {
                        var oldRipartizione = ripartizione;
                        ripartizione = new RipartizioneSpeseDTO();
                        if(oldRipartizione != null)
                        {
                            ripartizione.Descrizione = oldRipartizione.Descrizione;
                            ripartizione.DescrizioneVoceSpesa = oldRipartizione.DescrizioneVoceSpesa;
                            ripartizione.NomeModello = oldRipartizione.NomeModello;
                        }
                    }
                    foreach (var movimentoDto in dettaglioDto.Movimenti)
                    {
                        if (movimentoDto.ID > 0)
                        {
                            var movimento = daoFactory.GetMovimentoContabileDao().Find(movimentoDto.ID, false);
                            if (movimento?.MovimentoStorno != null)
                            {
                                try
                                {
                                    movimentoDto.IdMovimentoStorno = movimento.MovimentoStorno.ID;
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore nella lettura dell'id del movimento di storno - {0} - spesa:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), spesaDto.ID, movimento.ID);
                                }
                                finally
                                {
                                    movimento.MovimentoStorno = null;
                                }
                            }
                        }

                        movimentoDto.ID = 0;
                        if(dettaglioDto.IdModelloRipartizione == null)
                            ripartizioneSpesa.GetRipartizioneByMovimento(movimentoDto, spesaDto.IdEsercizio.GetValueOrDefault(), ripartizione);
                    }

                }

                // --------------------------------
                // Aggiungo le ripartizioni tra le diverse unità immobiliari
                // --------------------------------
                ripartizioneSpesa.AddMovimentiRipartizione(listaRipartizione, spesaDto);

                // --------------------------------
                // Salvataggio della spesa
                // --------------------------------
                if(spesaDto.StatoSpesa == StatoSpesaEnum.Undefined)
                    spesaDto.StatoSpesa = StatoSpesaEnum.Inserita;
                
                var resultSpesa = ManageDomainEntity(spesaDto, isMultiIva);
                if (resultSpesa.Spesa != null)
                {
                    var spesa = resultSpesa.Spesa;

                    // ripartizione di default
                    // TODO: Dato che la ripartizione ora viene ricalcolata quando serve (stampa riparto bilancio ecc....) 
                    // probabilmente NON è più necessaria la chiamata a questo metodo
                    //ripartizioneSpesa.AddDefaultRipartizione(listaRipartizione, spesa);

                    // --------------------------------
                    // Movimenti contabili secondari
                    // --------------------------------
                    // Eliminazione della vecchia testata
                    if (spesaDto.IdTestata > 0)
                    {
                        var testata = daoFactory.GetTestataMovimentoContabileDao().Find(spesaDto.IdTestata, false);

                        // bugid#4168
                        if(testata != null)
                            deleteTestata(testata, daoFactory);
                    }

                    // Creazione dei nuovi movimenti contabili
                    movimentoContabileService.SetMovimentiInserimentoSpesa(spesa, null, spesaDto.DataRegistrazione);

                    // --------------------------------
                    // Modello registrazione contabile
                    // --------------------------------
                    if (listaRipartizione.Count > 0)
                    {
                        foreach (var dettaglio in spesa.Dettagli)
                        {
                            var kvpRipartizione = getDettaglioDto(listaRipartizione, dettaglio.NumeroRiga.GetValueOrDefault());
                            if (kvpRipartizione != null)
                            {
                                var listaMovimenti = new List<MovimentoContabileDTO>(kvpRipartizione.GetValueOrDefault().Key.Movimenti.Length);
                                listaMovimenti.AddRange(kvpRipartizione.GetValueOrDefault().Key.Movimenti);

                                var modello = ripartizioneSpesa.SalvaModelloRipartizioneContabile(kvpRipartizione.GetValueOrDefault().Value, dettaglio, listaMovimenti, dettaglio.ImportoLordo.GetValueOrDefault());
                                if (modello != null)
                                {
                                    if (kvpRipartizione.GetValueOrDefault().Value.AssociatoFornitore)
                                    {
                                        var modelloContabileFornitore = new ModelloContabileFornitore(spesa.FornitoreRiferimento, modello, null);
                                        daoFactory.GetModelloContabileFornitoreDao().SaveOrUpdate(modelloContabileFornitore);
                                    }

                                    dettaglio.ModelloRipartizione = modello;
                                }
                            }
                        }
                    }

                    // ----------------------------------------------------------------------------------------------------------------------------------------------------------------
                    // Aggiorno eventuali movimenti secondari collegati.
                    // ----------------------------------------------------------------------------------------------------------------------------------------------------------------
                    if (movimentiSecondari != null)
                        ripartizioneSpeseService.UpdateMovimentiSecondari(spesa, movimentiSecondari);
                    // ----------------------------------------------------------------------------------------------------------------------------------------------------------------

                    // ----------------------------------------------------------------------------------------------------------------------------------------------------------------
                    // Aggiorno i documenti
                    // ----------------------------------------------------------------------------------------------------------------------------------------------------------------
                    if (spesaDto.IdDocumenti.Count > 0)
                    {
                        foreach (var idDoc in spesaDto.IdDocumenti)
                        {
                            var documento = daoFactory.GetDocumentoDao().Find(idDoc, false);
                            if(documento != null)
                                documento.SpesaRiferimento = spesa;
                        }
                    }

                    // ======================================================================================
                    //  Registro gli eventuali pagamenti immediati
                    // ======================================================================================
                    var pagamentoService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IPagamentoService>();
                    pagamentoService.CreatePagamentiImmediati(spesa.ID, spesaDto.Scadenze, null);

                    // ======================================================================================
                    //  Recupero il numero di protocollo e l'identificativo di archiviazione
                    // ======================================================================================
                    if (spesa.NumeroProtocollo == null)
                    {
                        var progressivo = protocolloService.GetProgressivo(TipoProtocollo.Fattura, spesa.EsercizioRiferimento.DataApertura.GetValueOrDefault().Year, spesa.EsercizioRiferimento.CondominioRiferimento);
                        if (progressivo.Progressivo != null)
                        {
                            spesa.NumeroProtocollo = progressivo.Progressivo;
                            spesa.AnnoArchiviazioneOttica = spesa.EsercizioRiferimento.DataApertura.GetValueOrDefault().Year;
                        }
                        else
                            return new SpesaInfoDTO { Id = 0, IdentificativoArchiviazione = null, NumeroProtocollo = 0, StampaEtichettaArchiviazione = false, Message = progressivo.Message };
                    }

                    var identificativoArchiviazione = getArchiviazioneOtticaService().GetIdentificativoArchiviazione(spesa);

                    var impostazioni = daoFactory.GetImpostazioniAziendaDao().GetByAzienda(spesa.EsercizioRiferimento.CondominioRiferimento.Azienda.ID);
                    if (impostazioni == null)
                    {
                        impostazioni = new ImpostazioniAzienda(daoFactory.GetAziendaDao().GetById(spesa.EsercizioRiferimento.CondominioRiferimento.Azienda.ID, false));
                        daoFactory.GetImpostazioniAziendaDao().SaveOrUpdate(impostazioni);
                    }

                    var stampaEtichetta = impostazioni.UtilizzoEtichettatriceArchiviazioneOtticaFatture && spesa.IsAbilitataArchiviazioneOttica && spesaDto.ID == 0;
                    var etichettatrice = impostazioni.EtichettatriceArchiviazioneOttica;
                    var tipoEtichetta = impostazioni.TipoEtichettaArchiviazioneOttica;
                    var trayEtichettatriceAttivazioneOttica = impostazioni.TrayEtichettatriceAttivazioneOttica;

                    // ======================================================================================
                    //  Aggiorno eventuali movimenti per interessi e sanzioni pagati in ritardo
                    // ======================================================================================
                    movimentoContabileService.SetMovimentiInteressiSanzioni(spesa);

                    return new SpesaInfoDTO { Id = spesa.ID, NumeroProtocollo = spesa.NumeroProtocollo.GetValueOrDefault(), IdentificativoArchiviazione = identificativoArchiviazione, StampaEtichettaArchiviazione = stampaEtichetta, EtichettatriceArchiviazione = etichettatrice, TipoEtichettaArchiviazione = tipoEtichetta, TrayEtichettatriceAttivazioneOttica = trayEtichettatriceAttivazioneOttica };
                }

                return new SpesaInfoDTO { Id = 0, NumeroProtocollo = 0, IdentificativoArchiviazione = null, StampaEtichettaArchiviazione = false, EtichettatriceArchiviazione = string.Empty, TipoEtichettaArchiviazione = "Testo", Message = resultSpesa.Message };
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel salvataggio della spesa - {0} - numeroDocumento:{1} - dataDocumento:{2} - dataRegistrazione:{3}", ex, Utility.GetMethodDescription(), spesaDto.NumeroDocumento, spesaDto.DataDocumento, spesaDto.DataRegistrazione);
                throw;
            }
        }
예제 #30
0
 public RipartizioneSpeseDTO GetRipartizioneByMovimento(MovimentoContabileDTO movimento, EsercizioDTO esercizio, RipartizioneSpeseDTO ripartizioneDettaglio)
 {
     try
     {
         if (movimento.IdConto > 0 && esercizio != null)
         {
             var result = GetServiceClient().GetRipartizioneByMovimento(movimento, esercizio.ID, ripartizioneDettaglio, GetUserInfo());
             CloseService();
             return result;
         }
         return null;
     }
     catch (Exception ex)
     {
         _log.ErrorFormat("Errore nella lettura della ripartizione per movimento - {0} - movimento:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), movimento != null ? movimento.ID.ToString(CultureInfo.InvariantCulture) : "<NULL>", esercizio != null ? esercizio.ID.ToString(CultureInfo.InvariantCulture) : "<NULL>");
         throw;
     }
 }