public void LoadData(CondominioDTO condominio, EsercizioDTO esercizio)
 {
     try
     {
         _condominio = condominio;
         _esercizio = esercizio;
         _pianoRateale = getRateCondominiService().GetPianoRatealeByEsercizio(_esercizio.ID, true);
         if (_pianoRateale != null)
             pianoRatealeDettaglioDTOBindingSource.DataSource = _pianoRateale.Rate;
         _rateDaAggiornare.Clear();
         btnConferma.Visible = true;
     }
     catch (Exception ex)
     {
         _log.ErrorFormat("Errore inaspettato durante il caricamento dei dati del piano rateale - {0} - condominio:{1} - esercizio:{1}", ex, Gipasoft.Library.Utility.GetMethodDescription(), _condominio.ID, _esercizio.ID);
         throw;
     }
 }
        public void LoadData(CondominioDTO condominio, EsercizioDTO esercizio, TipoListaRate tipoLista, bool isAllowEmpty, bool rateAcconto, TipoAccorpamentoRateEnum tipo)
        {
            try
            {
                Clear();

                _condominio = condominio;
                _esercizio = esercizio;
                _tipo = tipo;
                _rateAcconto = rateAcconto;

                if (condominio != null && esercizio != null && listaRateSoggetti != null)
                {
                    loadConti();
                    _pianoRateale = getRateCondominiService().GetPianoRatealeByEsercizio(_esercizio.ID, false);
                    if (_pianoRateale != null &&  _pianoRateale.ID > 0)
                        _tipo = _pianoRateale.Tipo;

                    var form = new ExecuteLoadDataListAsync<RataSoggettoDTO>("Le rate sono in corso di caricamento ....." + Environment.NewLine + "Si prega di attendere.");
                    Func<List<RataSoggettoDTO>> loadDati = () => getRateCondominiService().GetByEsercizio(esercizio.ID);
                    form.LoadData(loadDati);
                    form.ShowDialog();

                    if (form.DataSourceObject == null)
                    {
                        ParentForm?.Close();
                        return;
                    }

                    _rateSoggetti = form.DataSourceObject;
                    form.Dispose();

                    var formSaldi = new ExecuteLoadDataObjectAsync<ResultSaldiCondomini>("I saldi dei condomini sono in corso di caricamento ....." + Environment.NewLine + "Si prega di attendere.");
                    Func<ResultSaldiCondomini> loadSaldi = () => getRateCondominiService().GetSaldiSoggetti(esercizio.ID, null, null, _tipo);
                    formSaldi.LoadData(loadSaldi);
                    formSaldi.ShowDialog();

                    if ((string.IsNullOrEmpty(formSaldi.DataSourceObject.Message) && formSaldi.DataSourceObject.Saldi != null) ||  !_isCreazione)
                    {

                        _saldiSoggetti = formSaldi.DataSourceObject.Saldi;
                        formSaldi.Dispose();
                        if (_rateSoggetti.Count > 0 || isAllowEmpty)
                        {
                            btnStampa.Visible = true;
                            btnConferma.Visible = true;
                            chkDataEmissione.Visible = true;
                            sceltaTipoLista.Visible = true;
                            listaRateSoggetti.Visible = true;

                            if (_isCreazione)
                            {
                                btnStampa.Visible = false;
                                nuovaDataPanel.Visible = false;
                            }
                            else
                            {
                                btnStampa.Visible = true;
                                nuovaDataPanel.Visible = true;
                            }

                            // Se è ancora a null carico la lista dei soggetti relativi all'esercizio.
                            if (_soggetti == null)
                                _soggetti = getRateCondominiService().GetPartecipanti(esercizio.ID, _tipo);

                            if (tipoLista == TipoListaRate.Pivot)
                            {
                                try
                                {
                                    var resultMessage = getRateCondominiService().ConvertRateSoggettiToPivot(_rateSoggetti, _saldiSoggetti, null, _allowInvertiSegno, _pianoRateale, _isCreazione);
                                    if (resultMessage.DataTable == null)
                                    {
                                        CommonMessages.DisplayWarning(string.Format("Si sono verificati i seguenti errori:{1}{0}{1}Si prega di riprovare", resultMessage.FatalMessage, Environment.NewLine));
                                        ParentForm?.Close();
                                        return;
                                    }
 
                                    listaRateSoggetti.DataSource = resultMessage.DataTable;
                                    setGridLayout(tipoLista);
                                    setRowsLayout();
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore inaspettato durante il caricamento delle rate - DATA SOURCE - {0} - condominio:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), _condominio.ID, _esercizio.ID);
                                }
                            }
                            else if (tipoLista == TipoListaRate.Editabile)
                            {
                                listaRateSoggetti.DataSource = _rateSoggetti;

                                listaRateSoggetti.DisplayLayout.ValueLists.Clear();
                                listaRateSoggetti.DisplayLayout.ValueLists.Add(DataSourceHelper.GetValueList(_soggetti, "ID", "DisplayNominativo", "SoggettiCondominio"));
                                listaRateSoggetti.DisplayLayout.Bands[0].Columns["IdSoggettoCondominio"].ValueList = listaRateSoggetti.DisplayLayout.ValueLists["SoggettiCondominio"];
                                setGridLayout(tipoLista);
                            }

                            listaRateSoggetti.DisplayLayout.Bands[0].Summaries.Clear();
                            foreach (var column in listaRateSoggetti.DisplayLayout.Bands[0].Columns)
                            {
                                if (column.DataType == typeof (decimal))
                                    DataGridHelper.AddSummary(listaRateSoggetti.DisplayLayout.Bands[0], column.Key, "c");
                            }
                        }
                        else
                        {
                            listaRateSoggetti.DataSource = new List<RataSoggettoDTO>();
                            CommonMessages.DisplayWarning("Non sono presenti rate.");
                            var parentForm = _parentForm as MainContabilita;
                            if (parentForm != null)
                                parentForm.ToClose = true;
                            else if (ParentForm != null)
                                ((MainContabilita) ParentForm).ToClose = true;
                        }

                        listaRateSoggetti.PerformAction(UltraGridAction.FirstRowInBand);

                        loadPianoRateale();
                    }
                    else
                    {
                        CommonMessages.DisplayWarning($"Si sono verificati degli errori nel caricamento dei saldi:{Environment.NewLine}{formSaldi.DataSourceObject.Message}");
                        formSaldi.Dispose();
                    }
                }

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante il caricamento dei dati del piano rateale - 1 - {0} - condominio:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), _condominio.ID, _esercizio.ID);
                throw;
            }
        }
Exemple #3
0
        public PianoRatealeSoggetti GetPianoRatealeSoggetti(PianoRatealeDTO testataPianoRateale, int numeroRate, IList<RiepilogoRipartoDTO> riepilogoRiparto)
        {
            var pianoRateale = CreatePianoRateale(testataPianoRateale, numeroRate, riepilogoRiparto);

            var saldi = new List<ImportoSaldoSoggettoDTO>();
            if (riepilogoRiparto != null)
            {
                saldi.AddRange(riepilogoRiparto.Select(riepilogo => new ImportoSaldoSoggettoDTO
                {
                    ID = 0, IdSoggettoCondominio = riepilogo.IdSoggettoCondominio, IdPersona = riepilogo.IdPersona, Importo = riepilogo.SaldoEsercizioPrecedente, Version = 0
                }));
            }
            else
                saldi = GetSaldiSoggetti(testataPianoRateale.IdEsercizio, null, null, testataPianoRateale.Tipo);

            return new PianoRatealeSoggetti(pianoRateale, saldi, _rateCreate);
        }
Exemple #4
0
        private int getSoggettoCondominioPrincipale(int idPersona, int idSoggetto, SoggettoCondominio soggettoPrincipale, IList<RiepilogoRipartoDTO> riepilogoRiparto, PianoRatealeDTO testataPianoRateale)
        {
            var idSoggettoPrincipale = idSoggetto;

            switch (testataPianoRateale.Tipo)
            {
                case TipoAccorpamentoRateEnum.Nessuno:
                    idSoggettoPrincipale = idSoggetto;
                    break;

                case TipoAccorpamentoRateEnum.Persona:
                    var foundItem = (from item in riepilogoRiparto
                                                     where item.IdPersona == idPersona && item.CodiceTipoUnita == 1
                                                     select item).FirstOrDefault() ?? (from item in riepilogoRiparto
                                                                                       where item.IdPersona == idPersona
                                                                                       select item).FirstOrDefault();
                    if (foundItem != null)
                        idSoggettoPrincipale = foundItem.IdSoggettoCondominio;
                    break;

                case TipoAccorpamentoRateEnum.Personalizzato:
                    if (soggettoPrincipale != null)
                        idSoggettoPrincipale = soggettoPrincipale.ID;
                    else
                    {
                        SoggettoCondominio soggetto = _daoFactory.GetSoggettoCondominioDao().GetById(idSoggetto, false);
                        if (soggetto.SoggettoPrincipale != null)
                            idSoggettoPrincipale = soggetto.SoggettoPrincipale.ID;
                        else // se non sono presenti accorpamenti personalizzati non viene eseguito nessun accorpamento
                            goto case TipoAccorpamentoRateEnum.Nessuno;
                    }
                    break;
            }

            return idSoggettoPrincipale;
        }
        public ResultDataTable ConvertRateSoggettiToPivot(List<RataSoggettoDTO> rate, List<ImportoSaldoSoggettoDTO> saldi, IList<RiepilogoRipartoDTO> riepilogoRiparto, bool allowInvertiSegno, PianoRatealeDTO pianoRateale, bool showError)
        {
            try
            {
                IList<ImportiDTO> importi = null;
                if (riepilogoRiparto == null && rate.Count > 0)
                {
                    var result = GetServiceClient().GetImportiBilancioPreventivoCorrente(rate[0].IdEsercizio, pianoRateale.Tipo, GetUserInfo());
                    if (result.Importi != null || !showError)
                        importi = result.Importi;
                    else
                    {
                        return new ResultDataTable(null, result.FatalMessage);
                    }
                }

                var inversioneSaldi = GetServiceClient().GetInversioneSaldiCondomini(GetUserInfo());

                var tb = new DataTable("RateSoggettiPivot");
                var dateColumn = new List<DataColumn>();

                try
                {
                    tb.Columns.Add("IdSoggetto", typeof(int));
                    tb.Columns.Add("IdPersona", typeof(int));
                    tb.Columns.Add("Nominativo", typeof(string));
                    tb.Columns.Add("DescrizioneUnitaImmobiliare", typeof(string));
                    tb.Columns.Add("OrdineUnitaImmobiliare", typeof(int));
                    tb.Columns.Add("ImportoSaldoPrecedente", typeof(decimal));
                    tb.Columns.Add("ImportoPreventivo", typeof(decimal));
                    tb.Columns.Add("TotaleImporto", typeof(decimal));

                    tb.PrimaryKey = new[] { tb.Columns["IdSoggetto"] };

                    // ----------------------------------------------
                    // Aggiungo una colonna per ogni Data
                    // ----------------------------------------------
                    if (rate.Count > 0)
                    {
                        var idExampleSoggetto = rate[0].IdSoggettoCondominio;
                        var listaRateExample = rate.Where(rata => rata != null && rata.IdSoggettoCondominio == idExampleSoggetto).ToList();
                        dateColumn = new List<DataColumn>(listaRateExample.Count);
                        dateColumn = listaRateExample.Aggregate(dateColumn, (current, rataExample) => addColumnByData(rataExample.DataScadenza.GetValueOrDefault(), tb, current));
                    }
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nel calcolo del pivot delle rate - CREAZIONE TABLE - {0} - pianoRateale:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), pianoRateale?.ID.ToString() ?? "<NULL>", Login.Instance.CurrentLogin().Azienda);
                    throw;
                }

                // ----------------------------------------------
                // Riempio la tabella
                // ----------------------------------------------
                var dateVersamento = new Dictionary<string, DateTime>();
                tb.ExtendedProperties.Add("DateVersamento", dateVersamento);
                try
                {
                    foreach (var rata in rate.OrderBy(rt => rt.OrdineUnitaImmobiliare).ThenBy(rt => rt.TipoSoggettoCondominio))
                    {
                        try
                        {
                            var row = tb.Rows.Find(rata.IdSoggettoCondominio);
                            if (row == null)
                            {
                                row = tb.NewRow();
                                row["IdSoggetto"] = rata.IdSoggettoCondominio;
                                row["IdPersona"] = rata.IdPersona;
                                row["Nominativo"] = rata.DescrizioneSoggettoCondominio;
                                row["DescrizioneUnitaImmobiliare"] = rata.DescrizioneUnitaImmobiliare;
                                row["OrdineUnitaImmobiliare"] = rata.OrdineUnitaImmobiliare;
                                tb.Rows.Add(row);
                            }
                            if (!tb.Columns.Contains("Data_" + rata.DataScadenza.GetValueOrDefault().ToShortDateString()))
                                dateColumn = addColumnByData(rata.DataScadenza.GetValueOrDefault(), tb, dateColumn);

                            decimal importo = 0;
                            if (row["Decimal_Data_" + rata.DataScadenza.GetValueOrDefault().ToShortDateString()] is decimal)
                                importo = (decimal)row["Decimal_Data_" + rata.DataScadenza.GetValueOrDefault().ToShortDateString()];
                            if (rata.Importo != null)
                                importo += rata.Importo.GetValueOrDefault();

                            if (importo != 0)
                                row["Decimal_Data_" + rata.DataScadenza.GetValueOrDefault().ToShortDateString()] = importo;
                            else
                                row["Decimal_Data_" + rata.DataScadenza.GetValueOrDefault().ToShortDateString()] = DBNull.Value;

                            if (rata.DataEmissione != null)
                                row["Data_" + rata.DataScadenza.GetValueOrDefault().ToShortDateString()] = rata.DataEmissione.GetValueOrDefault().ToShortDateString();

                            row["Stato_" + rata.DataScadenza.GetValueOrDefault().ToShortDateString()] = rata.StatoRata.ToString();
                            row["NumeroSolleciti_" + rata.DataScadenza.GetValueOrDefault().ToShortDateString()] = rata.NumeroSolleciti;
                            row["Alert_" + rata.DataScadenza.GetValueOrDefault().ToShortDateString()] = rata.Alert;

                            if (rata.ImportoPagato != null)
                                row["Versato_" + rata.DataScadenza.GetValueOrDefault().ToShortDateString()] = rata.ImportoPagato.GetValueOrDefault();

                            if (rata.DataUltimoVersamento != null)
                            {
                                var key = $"{rata.IdSoggettoCondominio}_{rata.DataScadenza.GetValueOrDefault().ToShortDateString()}";
                                var dataVersamento = DateTime.MinValue;
                                if (dateVersamento.ContainsKey(key))
                                {
                                    dataVersamento = dateVersamento[key];
                                    dateVersamento.Remove(key);
                                }
                                if (rata.DataUltimoVersamento.GetValueOrDefault() > dataVersamento)
                                    dataVersamento = rata.DataUltimoVersamento.GetValueOrDefault();

                                dateVersamento.Add(key, dataVersamento);
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore nel calcolo del pivot delle rate - SINGOLA RATA - {0} - rata:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), rata.ID, Login.Instance.CurrentLogin().Azienda);
                            throw;
                        }
                    }

                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nel calcolo del pivot delle rate - CARICAMENTO RATE - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), Login.Instance.CurrentLogin().Azienda);
                    throw;
                }

                // ----------------------------------------------
                // Calcolo i totali
                // ----------------------------------------------
                foreach (DataRow row in tb.Rows)
                {
                    try
                    {
                        var totaleImporto = dateColumn.Where(dc => row["Stato_" + dc.ColumnName.Split('_')[2]].ToString() != StatoRataEnum.Richiamata.ToString() && row[dc] != null && row[dc] != DBNull.Value).Sum(dc => (decimal)row[dc]);
                        row["TotaleImporto"] = totaleImporto;

                        try
                        {
                            var row1 = row;

                            IEnumerable<ImportoSaldoSoggettoDTO> saldiDTO = new List<ImportoSaldoSoggettoDTO>();
                            if(saldi != null)
                               saldiDTO = pianoRateale.Tipo != TipoAccorpamentoRateEnum.Persona ? saldi.Where(item => item.IdSoggettoCondominio == (int)row1["IdSoggetto"]) : saldi.Where(item => item.IdPersona == (int)row1["IdPersona"]);
                            foreach (var saldoDTO in saldiDTO)
                            {
                                try
                                {
                                    var importoPreventivo = 0m;
                                    if (row["ImportoPreventivo"] != null && row["ImportoPreventivo"] != DBNull.Value)
                                        importoPreventivo = (decimal)row["ImportoPreventivo"];

                                    var importoSaldo = 0m;
                                    if (row["ImportoSaldoPrecedente"] != null && row["ImportoSaldoPrecedente"] != DBNull.Value)
                                        importoSaldo = (decimal)row["ImportoSaldoPrecedente"];

                                    if (saldoDTO != null)
                                    {
                                        if (riepilogoRiparto != null)
                                            row["ImportoPreventivo"] = importoPreventivo + riepilogoRiparto.Where(item => item.IdSoggettoCondominio == saldoDTO.IdSoggettoCondominio).Sum(item => item.Importo);
                                        else if (importi != null)
                                            row["ImportoPreventivo"] = importoPreventivo + importi.Where(item => item.Id == saldoDTO.IdSoggettoCondominio).Sum(item => item.Importo);

                                        var saldo = saldoDTO.Importo;
                                        if (allowInvertiSegno && inversioneSaldi)
                                            saldo = saldo * -1;
                                        row["ImportoSaldoPrecedente"] = importoSaldo + saldo;

                                    }
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore nel calcolo del pivot delle rate - TOTALI SINGOLO SALDO - {0} - saldo:{1} - rata:{2} - azienda:{3}", ex, Utility.GetMethodDescription(), saldoDTO.ID, row["IdSoggetto"], Login.Instance.CurrentLogin().Azienda);
                                    throw;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore nel calcolo del pivot delle rate - TOTALI CARICAMENTO SALDI - {0} - rata:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), row["IdSoggetto"], Login.Instance.CurrentLogin().Azienda);
                            throw;
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore nel calcolo del pivot delle rate - TOTALI SINGOLA ROW - {0} - rata:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), row["IdSoggetto"], Login.Instance.CurrentLogin().Azienda);
                        throw;
                    }
                }

                // -----------------------------------------------------------------------------------
                // Se calcolo per soggetto rielaboro le righe in modo da averne una sola per soggetto
                // -----------------------------------------------------------------------------------
                if (pianoRateale != null && pianoRateale.Tipo == TipoAccorpamentoRateEnum.Persona)
                {
                    try
                    {
                        var personePresenti = new Dictionary<int, DataRow>();
                        var rowsToDelete = new Dictionary<int, DataRow>();
                        foreach (DataRow row in tb.Rows)
                        {
                            try
                            {
                                var idPersona = (int)row["IdPersona"];
                                if (personePresenti.ContainsKey(idPersona))
                                {
                                    if (isImportiNull(personePresenti[idPersona]))
                                    {
                                        if (!rowsToDelete.ContainsKey(idPersona))
                                            rowsToDelete.Add(idPersona, personePresenti[idPersona]);
                                    }
                                    else if (isImportiNull(row))
                                    {
                                        if (!rowsToDelete.ContainsKey(idPersona))
                                            rowsToDelete.Add(idPersona, row);
                                    }
                                }
                                else
                                    personePresenti.Add(idPersona, row);
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore nel calcolo del pivot delle rate - RIELABORAZIONE RIGHE PER SOGGETTO - SINGOLO SOGGETTO - {0} - persona:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), row["IdPersona"], Login.Instance.CurrentLogin().Azienda);
                                throw;
                            }
                        }

                        foreach (var kvp in rowsToDelete)
                        {
                            if (tb.Rows.Contains(kvp.Value["IdSoggetto"]))
                                tb.Rows.Remove(kvp.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore nel calcolo del pivot delle rate - RIELABORAZIONE RIGHE PER SOGGETTO - {0} - pianoRateale:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), pianoRateale.ID, Login.Instance.CurrentLogin().Azienda);
                        throw;
                    }
                }

                CloseService();

                var columnCaption = new Dictionary<string, string>();
                try
                {
                    foreach (var rataSoggettoDTO in rate)
                    {
                        try
                        {
                            var key = $"Decimal_Data_{rataSoggettoDTO.DataScadenza.GetValueOrDefault().ToShortDateString()}";
                            if (rataSoggettoDTO.VersamentiDopoChiusura && !columnCaption.ContainsKey(key))
                                columnCaption.Add(key, "Versamenti dopo chiusura");
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore nel calcolo del pivot delle rate - CAPTION VERSAMENTI DOPO CHIUSURA - SINGOLA RATA - {0} - rata:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), rataSoggettoDTO.ID, Login.Instance.CurrentLogin().Azienda);
                            throw;
                        }
                    }
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nel calcolo del pivot delle rate - CAPTION VERSAMENTI DOPO CHIUSURA - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), Login.Instance.CurrentLogin().Azienda);
                    throw;
                }

                tb.ExtendedProperties.Add("ColumnCaption", columnCaption);
                return new ResultDataTable(tb, null);
            }
            catch (Exception ex)
            {
                var idEsercizio = "rate a null";
                if (rate != null && rate.Count > 0 && rate[0] != null)
                    idEsercizio = rate[0].IdEsercizio.ToString();
                else if (rate != null && rate.Count == 0)
                    idEsercizio = "rate a 0";

                _log.ErrorFormat("Errore nel caricamento del piano rateale a tabella - {0} - esercizio:{1} - azienda:{2} - allowInvertiSegno:{2}", ex, Utility.GetMethodDescription(), idEsercizio, Login.Instance.CurrentLogin().Azienda, allowInvertiSegno);
                throw;
            }
        }
Exemple #6
0
        public PianoRatealeDTO CreatePianoRateale(PianoRatealeDTO testataPianoRateale, int numeroRate, IList<RiepilogoRipartoDTO> riepilogoRiparto)
        {
            var esercizio =_daoFactory.GetEsercizioDao().GetById(testataPianoRateale.IdEsercizio, false);
            var impostazioni = _daoFactory.GetImpostazioniAziendaDao().GetByAzienda(esercizio.CondominioRiferimento.Azienda.ID);
            var arrotondamenti = new Dictionary<int, decimal>();

            var rendiconto = _daoFactory.GetRendicontoAnnualeDao().Find(testataPianoRateale.IdRendiconto.GetValueOrDefault(), false) ??
                             _bilancioService.GetPreventivoCorrente(testataPianoRateale.IdEsercizio);

            testataPianoRateale.IdRendiconto = rendiconto.ID;

            // Se non è stato definito nessun arrotondamento, arrotondo comunque a .01
            var arrotondamentoImporti = 0.01m;
            if (testataPianoRateale.ArrontondamentoImporti > 0)
                arrotondamentoImporti = testataPianoRateale.ArrontondamentoImporti;

            // --------------------------------------------------------------------
            //  Leggo eventuali rate di acconto presenti
            // --------------------------------------------------------------------
            var pianoAcconto = _daoFactory.GetPianoRatealeDao().GetByEsercizio(esercizio);
            IList<PianoRatealeDettaglio> listaDettaglioPianoAcconto = null;
            if (pianoAcconto != null)
            {
                testataPianoRateale.ID = pianoAcconto.ID;
                listaDettaglioPianoAcconto = (pianoAcconto.Rate.Where(item => item.IsAcconto)).ToList();
            }

            // --------------------------------------------------------------------
            // Creazione Piano Rateale
            // --------------------------------------------------------------------
            var startIndex = 1;
            var numeroRateAcconto = 0;
            DateTime? dataIniziale = null;
            if (listaDettaglioPianoAcconto != null)
            {
                startIndex = listaDettaglioPianoAcconto.Count + 1;
                numeroRateAcconto = listaDettaglioPianoAcconto.Count(item => item.IsAcconto);
                var ultimaRata = listaDettaglioPianoAcconto.OrderBy(item => item.DataScadenza).LastOrDefault();
                if (ultimaRata?.DataScadenza != null)
                    dataIniziale = ultimaRata.DataScadenza.GetValueOrDefault();
            }

            numeroRate += numeroRateAcconto;

            if (testataPianoRateale.Rate == null || testataPianoRateale.Rate.Count != numeroRate)
            {
                testataPianoRateale.Rate = new List<PianoRatealeDettaglioDTO>();
                
                // Calcolo la distanza proposto, in numero di mesi, tra una rata e quella successiva
                var denominatore = numeroRate - startIndex + 1;
                var numeroMesi = DivideRoundingUp(numeroRate, 12)*12;
                var monthGap = numeroMesi/12;

                if (dataIniziale == null && esercizio.DataApertura != null)
                    dataIniziale = esercizio.DataApertura.GetValueOrDefault();
                if (dataIniziale == null)
                    dataIniziale = new DateTime(DateTime.Today.Year, 2, 1);
                if(esercizio.DataChiusura != null && esercizio.Gestione == GestioneEsercizioEnum.Ordinario && numeroMesi <= 12)
                    numeroMesi = Convert.ToInt32(Math.Round((esercizio.DataChiusura.GetValueOrDefault() - dataIniziale.GetValueOrDefault()).TotalDays / 30));

                if(denominatore > 0)
                    monthGap = numeroMesi / denominatore;

                var scadenza = new DateTime(dataIniziale.GetValueOrDefault().AddMonths(1).Year, dataIniziale.GetValueOrDefault().AddMonths(1).Month, 1);
                var rataIndex = 0;
                for (var i = startIndex; i <= numeroRate; i++)
                {
                    var dettaglio = new PianoRatealeDettaglioDTO {DataScadenza = scadenza, Progressivo = i};
                    if (i == startIndex)
                        dettaglio.PercentualeRipartoSaldo = 1m;
                    dettaglio.PercentualeRiparto = Math.Round(1m / Convert.ToDecimal(numeroRate - startIndex + 1), 4);
                    rataIndex++;
                    dettaglio.Descrizione = $"Rata n. {rataIndex} del {scadenza:d}";

                    scadenza = scadenza.AddMonths(monthGap);
                    testataPianoRateale.Rate.Add(dettaglio);
                }
            }

            // --------------------------------------------------------------------
            // Calcolo importi piano rateale
            // --------------------------------------------------------------------
            if (riepilogoRiparto == null)
                riepilogoRiparto = GetRiepilogoRiparto(testataPianoRateale.IdEsercizio, null, null, testataPianoRateale.Tipo);
 
            // Se arriva dal client cambio segno agli importi.
            else if (impostazioni.InversioneSaldiRate)
            {
                foreach (var item in riepilogoRiparto)
                    item.Importo = item.Importo * -1;
            }

            var importiNegativi = new Dictionary<int, decimal>();
            var importiMinimi = new Dictionary<int, decimal>();
            _rateCreate = new List<RataSoggettoDTO>();

            foreach (var dettaglio in testataPianoRateale.Rate)
            {
                if (dettaglio.ID == 0)
                {
                    dettaglio.Importo = 0;

                    // ===========================================================================
                    //  Creazione delle rate
                    // ===========================================================================
                    foreach (var itemRiepilogo in riepilogoRiparto)
                    {
                        var idSoggettoCondominio = getSoggettoCondominioPrincipale(itemRiepilogo.IdPersona, itemRiepilogo.IdSoggettoCondominio, null, riepilogoRiparto, testataPianoRateale);

                        RataSoggettoDTO rata;
                        if (!_rateCreate.Any(item => item.IdSoggettoCondominio == idSoggettoCondominio && item.DataScadenza == dettaglio.DataScadenza))
                        {
                            rata = new RataSoggettoDTO
                            {
                                IdEsercizio = esercizio.ID,
                                DescrizioneEsercizio = esercizio.DisplayName,
                                DataScadenza = dettaglio.DataScadenza,
                                Progressivo = dettaglio.Progressivo,
                                IdPianoDettaglioRatealeRiferimento = dettaglio.ID,
                                IdSoggettoCondominio = idSoggettoCondominio,
                                DisplayName = itemRiepilogo.Nominativo,
                                DescrizioneUnitaImmobiliare = itemRiepilogo.DescrizioneUnitaImmobiliare,
                                IdPersona = itemRiepilogo.IdPersona,
                                DescrizioneSoggettoCondominio = itemRiepilogo.Nominativo,
                                OrdineUnitaImmobiliare = itemRiepilogo.OrdineUnitaImmobiliare,
                                TipoSoggettoCondominio = itemRiepilogo.TipoSoggettoCondominio,
                                Subalterno = itemRiepilogo.Subalterno
                            };
                            
                            _rateCreate.Add(rata);
                        }
                        else
                        {
                            var dettaglio2 = dettaglio;
                            rata = (from item in _rateCreate
                                    where idSoggettoCondominio == item.IdSoggettoCondominio && item.DataScadenza == dettaglio2.DataScadenza
                                    select item).SingleOrDefault();
                        }

                        // ===========================================================================
                        //  Calcolo Importo
                        // ===========================================================================
                        // Importo preventivo
                        // ------------------------------
                        var importoPreventivo = getImportoNettoAcconti(itemRiepilogo, listaDettaglioPianoAcconto) * dettaglio.PercentualeRiparto.GetValueOrDefault();

                        // Importo saldo
                        // ------------------------------
                        var importoSaldo = itemRiepilogo.SaldoEsercizioPrecedente * dettaglio.PercentualeRipartoSaldo.GetValueOrDefault();
                        if (impostazioni.InversioneSaldiRate)
                            importoSaldo = importoSaldo*-1;

                        // Rata totale
                        // ------------------------------
                        if (rata != null)
                        {
                            var importoRata = rata.Importo.GetValueOrDefault() + importoSaldo + importoPreventivo;
                            rata.Importo = importoRata;
                        }
                    }

                    // ===========================================================================
                    //  Rilettura delle rate la gestione degli importi minimi
                    // ===========================================================================
                    var dettaglio1 = dettaglio;
                    var ratePerDettaglio = from item in _rateCreate
                                           where dettaglio1 != null && item.DataScadenza == dettaglio1.DataScadenza
                                           select item;

                    foreach (var rata in ratePerDettaglio)
                    {
                        var importoRata = rata.Importo.GetValueOrDefault();

                        // Se presenti importi minimi devo aggiungerli alla rata
                        if (importiNegativi.ContainsKey(rata.IdSoggettoCondominio))
                        {
                            var importoNegativo = importiNegativi[rata.IdSoggettoCondominio];
                            importoRata += importoNegativo;
                            importiNegativi.Remove(rata.IdSoggettoCondominio);
                        }

                        // Creo rata solo se importo è maggiore dell'importo minimo, se è inferiore al minimo lo memorizzo per utilizzarlo nelle rate successive
                        if (importoRata > testataPianoRateale.ImportoMinimo)
                        {
                            rata.Importo = Convert.ToDecimal(Arrotonda.Round(Convert.ToDouble(importoRata), Convert.ToDouble(arrotondamentoImporti)));

                            // memorizzo eventuali arrotondamenti
                            decimal importoArrontondamento = 0;
                            if (arrotondamenti.ContainsKey(rata.IdSoggettoCondominio))
                            {
                                importoArrontondamento = arrotondamenti[rata.IdSoggettoCondominio];
                                arrotondamenti.Remove(rata.IdSoggettoCondominio);
                            }
                            importoArrontondamento += importoRata - rata.Importo.GetValueOrDefault();
                            arrotondamenti.Add(rata.IdSoggettoCondominio, importoArrontondamento);
                        }
                        else
                        {
                            rata.Importo = 0;
                            if (importoRata < 0)
                            {
                                decimal importo = 0;
                                if (importiNegativi.ContainsKey(rata.IdSoggettoCondominio))
                                {
                                    importo = importiNegativi[rata.IdSoggettoCondominio];
                                    importiNegativi.Remove(rata.IdSoggettoCondominio);
                                }
                                importo += importoRata;
                                importiNegativi.Add(rata.IdSoggettoCondominio, importo);
                            }
                            else
                            {
                                decimal importo = 0;
                                if (importiMinimi.ContainsKey(rata.IdSoggettoCondominio))
                                {
                                    importo = importiMinimi[rata.IdSoggettoCondominio];
                                    importiMinimi.Remove(rata.IdSoggettoCondominio);
                                }
                                importo += importoRata;
                                importiMinimi.Add(rata.IdSoggettoCondominio, importo);
                            }
                        }

                        // -------------------------------
                        // Aggiorno dettaglio rata
                        // -------------------------------
                        dettaglio.Importo += rata.Importo.GetValueOrDefault();
                    }

                }
            }

            // ---------------------------------------------------------------------------------
            // Aggiungo le rate di acconto
            // ---------------------------------------------------------------------------------
            int index = 0;
            if (listaDettaglioPianoAcconto != null)
            {
                foreach (PianoRatealeDettaglio dettaglioPianoAcconto in listaDettaglioPianoAcconto)
                {
                    if (testataPianoRateale.Rate.All(item => item.ID != dettaglioPianoAcconto.ID))
                    {
                        index++;
                        var dettaglioAccontoDto = new PianoRatealeDettaglioDTO
                        {
                            ID = dettaglioPianoAcconto.ID,
                            IsAcconto = true,
                            DataScadenza = dettaglioPianoAcconto.DataScadenza.GetValueOrDefault(),
                            Descrizione = dettaglioPianoAcconto.Descrizione,
                            IsDeleteAllow = false,
                            IdPianoRatealeRiferimento = dettaglioPianoAcconto.PianoRatealeRiferimento.ID,
                            StatoRata = dettaglioPianoAcconto.Stato,
                            Version = dettaglioPianoAcconto.Version,
                            Progressivo = index,
                            Importo = dettaglioPianoAcconto.RateSoggetti.Where(item => !item.DaRichiamare && item.Stato != StatoRataEnum.Richiamata).Sum(item => item.Importo)
                        };

                        testataPianoRateale.Rate.Add(dettaglioAccontoDto);
                    }

                    foreach (RataSoggetto rataAcconto in dettaglioPianoAcconto.RateSoggetti.Where(item => !item.DaRichiamare && item.Stato != StatoRataEnum.Richiamata))
                    {
                        var rataAccontoDto = new RataSoggettoDTO
                        {
                            ID = rataAcconto.ID,
                            DataScadenza = rataAcconto.DataScadenza,
                            DescrizioneSoggettoCondominio = rataAcconto.Soggetto.DisplayName,
                            DescrizioneUnitaImmobiliare = rataAcconto.Soggetto.UnitaImmobiliare.Descrizione,
                            IdEsercizio = rataAcconto.PianoRatealeDettaglio.PianoRatealeRiferimento.Esercizio.ID,
                            DescrizioneEsercizio = rataAcconto.PianoRatealeDettaglio.PianoRatealeRiferimento.Esercizio.DisplayName,
                            IdPianoDettaglioRatealeRiferimento = rataAcconto.PianoRatealeDettaglio.ID,
                            IdUnitaImmobiliare = rataAcconto.Soggetto.UnitaImmobiliare.ID,
                            Subalterno = rataAcconto.Soggetto.UnitaImmobiliare.Subalterno,
                            Importo = rataAcconto.Importo,
                            ImportoPagato = rataAcconto.GetImportoVersato(null),
                            OrdineUnitaImmobiliare = rataAcconto.Soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault(),
                            StatoRata = rataAcconto.Stato,
                            TipoSoggettoCondominio = rataAcconto.Soggetto.Tipo,
                            Version = rataAcconto.Version,
                            IsDeleteAllow = false,
                            Progressivo = rataAcconto.Progressivo,
                            IdPersona = rataAcconto.Soggetto.Persona.ID,
                            IdSoggettoCondominio = getSoggettoCondominioPrincipale(rataAcconto.Soggetto.Persona.ID, rataAcconto.Soggetto.ID, rataAcconto.Soggetto.SoggettoPrincipale, riepilogoRiparto, testataPianoRateale)
                        };

                        _rateCreate.Insert(0, rataAccontoDto);
                    }
                }
            }
            testataPianoRateale.Rate = testataPianoRateale.Rate.OrderBy(item => item.Progressivo).ToList();

            // ---------------------------------------------------------------------------------
            // Se ho ancora importi minimi li addebito alla prima rata ancora a 0
            // Può capitare, ad esempio, se abbiamo definito una rata che comprende il solo saldo
            // ---------------------------------------------------------------------------------
            foreach (var kvp in importiMinimi)
            {
                var kvp1 = kvp;
                var ratePerImporto = from item in _rateCreate
                                     where item.IdSoggettoCondominio == kvp1.Key
                                     orderby item.Importo, item.Progressivo
                                     select item;
                if (ratePerImporto.Any())
                {
                    var importoArrotondato = Convert.ToDecimal(Arrotonda.Round(Convert.ToDouble(kvp.Value), Convert.ToDouble(arrotondamentoImporti)));
                    var rata = ratePerImporto.FirstOrDefault();
                    if(rata != null)
                        rata.Importo += importoArrotondato;

                    // Aggiungo il residuo alla lista degli arrontondamenti
                    if (kvp.Value != importoArrotondato)
                    {
                        if (arrotondamenti.ContainsKey(kvp.Key))
                            arrotondamenti[kvp.Key] += (kvp.Value - importoArrotondato);
                        else
                            arrotondamenti.Add(kvp.Key, kvp.Value - importoArrotondato);
                    }
                }
                else
                {
                    _log.WarnFormat("Non trovata nessun rata a cui addebitare l'importo minimo di {0} - {1} - id:{2}", kvp.Value.ToString("c"), Utility.GetMethodDescription(), kvp.Key);
                }
            }


            // ---------------------------------------------------------------------------------
            // Calcolo residui - Solo se presente rata di arrotondamento
            // ---------------------------------------------------------------------------------
            if (testataPianoRateale.IdRataArrotondamenti > 0)
            {
                decimal residuoTotale = 0;
                foreach (RiepilogoRipartoDTO itemRiepilogo in riepilogoRiparto)
                {
                    if (arrotondamenti.ContainsKey(itemRiepilogo.IdSoggettoCondominio))
                    {
                        decimal importoResiduo = arrotondamenti[itemRiepilogo.IdSoggettoCondominio];

                        var riepilogo = itemRiepilogo;
                        RataSoggettoDTO rataResiduo = (from rata in _rateCreate
                                                       where rata.Progressivo == testataPianoRateale.IdRataArrotondamenti && rata.IdSoggettoCondominio == riepilogo.IdSoggettoCondominio && rata.Importo > 0
                                                       select rata).SingleOrDefault();
                        if (rataResiduo != null)
                        {
                            rataResiduo.Importo += importoResiduo;
                            residuoTotale += importoResiduo;
                            arrotondamenti.Remove(itemRiepilogo.IdSoggettoCondominio);
                        }
                    }
                }

                // ---------------------------------------------------------------------------------
                // Se ho ancora residui di arrotondamento li addebito alla prima rata disponibile > 0
                // ---------------------------------------------------------------------------------
                foreach (var kvp in arrotondamenti)
                {
                    var importoResiduo = kvp.Value;
                    var kvp1 = kvp;
                    var rateResiduo = from item in _rateCreate
                                         where item.IdSoggettoCondominio == kvp1.Key && item.Importo > 0
                                         orderby item.Progressivo
                                         select item;
                    if (rateResiduo.Any())
                    {
                        foreach (var rataResiduo in rateResiduo)
                        {
                            if (rataResiduo.Importo + importoResiduo >= 0)
                            {
                                rataResiduo.Importo += importoResiduo;
                                residuoTotale += importoResiduo;
                                break;
                            }
                        }
                    }
                }

                // ---------------------------------------------------------------------------------
                // Aggiorno col residuo la rata di dettaglio
                // ---------------------------------------------------------------------------------
                var dettaglioResiduo = (from dettaglio in testataPianoRateale.Rate
                                                             where dettaglio.Progressivo == testataPianoRateale.IdRataArrotondamenti
                                                             select dettaglio).SingleOrDefault();
                if (dettaglioResiduo != null) 
                    dettaglioResiduo.Importo += residuoTotale;
            }

            // ---------------------------------------------------------------------------------
            // Se ho ancora importi negativi verifico se riesco a sottrarli da qualche rata:
            // Può capitare, ad esempio, se abbiamo definito una rata che comprende il solo saldo
            // ---------------------------------------------------------------------------------
            var importiNegativiDaSottrarre = importiNegativi.Select(kvp => new ImportiDTO
                                                {
                                                    Id = kvp.Key, Importo = kvp.Value*-1
                                                }).ToList();

            foreach (var importoDto in importiNegativiDaSottrarre)
            {
                var dto = importoDto;
                var rateSoggetto = from item in _rateCreate
                                   where item.IdSoggettoCondominio == dto.Id
                                   select item;

                foreach (var rata in rateSoggetto)
                {
                    // Solo per le rate nuove
                    if (rata.ID == 0)
                    {
                        decimal importoOriginale = rata.Importo.GetValueOrDefault();
                        if (rata.Importo >= importoDto.Importo)
                            rata.Importo -= importoDto.Importo;
                        else if (rata.Importo < importoDto.Importo)
                            rata.Importo = 0;

                        importoDto.Importo -= importoOriginale - rata.Importo.GetValueOrDefault();
                    }
                }
            }

            return testataPianoRateale;
        }
 public ResultMessagesOfPianoRatealeDTOn0Zc5SOa CreatePianoRateale(PianoRatealeDTO pianoRateale, int numeroRate, List<RiepilogoRipartoDTO> riepilogo)
 {
     var result = GetServiceClient().CreatePianoRateale(pianoRateale, numeroRate, riepilogo, GetUserInfo());
     CloseService();
     return result;
 }
Exemple #8
0
		public PianoRatealeSoggetti GetPianoRatealeSoggetti(PianoRatealeDTO pianoRateale, int numeroRate, IList<RiepilogoRipartoDTO> riepilogoRiparto, UserInfo userinfo)
		{
			var windsorRep = new WindsorConfigRepository();
			try
			{
				windsorRep.BeginTransaction(userinfo);
                var rateService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IRateService>();
                var item = rateService.GetPianoRatealeSoggetti(pianoRateale, numeroRate, riepilogoRiparto);
				windsorRep.Commit();
				return item;
			}
			catch (Exception ex)
			{
                _log.ErrorFormat("Errore nella esecuzione della funzione - {0} - pianoRateale:{1} - esercizio:{2} - numeroRate:{3} - azienda:{4}", ex, Utility.GetMethodDescription(), pianoRateale.ID, pianoRateale.IdEsercizio, numeroRate, userinfo.Azienda);
				windsorRep.Rollback();
				throw;
			}
		}
        private PianoRatealeDTO setDto(PianoRateale item, bool dettaglioRate)
        {
            var dto = new PianoRatealeDTO
            {
                Version = item.Version,
                ArrontondamentoImporti = item.ArrotondamentoImporti.GetValueOrDefault(),
                ID = item.ID,
                IdEsercizio = item.Esercizio.ID,
                Tipo = item.Tipo
            };

            if (item.RataArrotondamenti != null)
            {
                try
                {
                    dto.IdRataArrotondamenti = item.RataArrotondamenti.ID;
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nella lettura della rata di arrotondamento - {0} - pianoRateale:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), item.ID, _info.Azienda);                    
                }
            }

            if(item.Rendiconto != null)
                dto.IdRendiconto = item.Rendiconto.ID;

            // Dettaglio Rate
            dto.Rate = new List<PianoRatealeDettaglioDTO>(item.Rate.Count);
            if (dettaglioRate)
            {
                foreach (var dettaglio in item.Rate.OrderBy(itemDettaglio => itemDettaglio.Progressivo))
                {
                    var dettaglioDTO = new PianoRatealeDettaglioDTO
                    {
                        DataScadenza = dettaglio.DataScadenza.GetValueOrDefault(),
                        Descrizione = dettaglio.Descrizione,
                        DisplayName = dettaglio.Descrizione,
                        ID = dettaglio.ID,
                        IdPianoRatealeRiferimento = item.ID,
                        Importo = dettaglio.RateSoggetti.Sum(itemRata => itemRata.Importo),
                        PercentualeRiparto = dettaglio.PercentualeRiparto,
                        PercentualeRipartoSaldo = dettaglio.PercentualeSaldoEsercizioPrecedente,
                        Progressivo = dettaglio.Progressivo,
                        IsAcconto = dettaglio.IsAcconto,
                        StatoRata = dettaglio.Stato
                    };

                    dto.Rate.Add(dettaglioDTO);
                }
            }

            return dto;
        }
 public AuthorizationMessages IsAllowUpdateDataPianoRateale(PianoRatealeDTO pianoRateale, int? idDettaglio, DateTime data)
 {
     if (pianoRateale != null)
     {
         var result = GetServiceClient().IsAllowUpdateDataPianoRateale(idDettaglio, pianoRateale.ID, data, GetUserInfo());
         CloseService();
         return result;
     }
     return new AuthorizationMessages();
 }
Exemple #11
0
        private void load()
        {
            _loaded = false;

            // ----------------------------------------------------------------------
            // Caricamento primo TAB
            // ----------------------------------------------------------------------
            var form = new ExecuteLoadDataObjectAsync<PianoRatealeDTO>("Il piano rateale è in corso di caricamento ....." + Environment.NewLine + "Si prega di attendere.");
            Func<PianoRatealeDTO> loadDati = () => getRateCondominiService().GetPianoRatealeByEsercizio(_esercizio.ID, true);
            form.LoadData(loadDati);
            form.ShowDialog();
            _pianoRateale = form.DataSourceObject;
            form.Dispose();

            if (_pianoRateale != null)
            {
                listaRate.InitializeRow += listaRate_InitializeRow;
                listaRate.CellChange += listaRateCellChange;

                pianoRatealeDettaglioDTOBindingSource.DataSource = _pianoRateale.Rate;

                var formSoggetti = new ExecuteLoadDataListAsync<RiepilogoRataSoggettoDTO>("E' in corso la ricerca dei condomini ....." + Environment.NewLine + "Si prega di attendere.");
                Func<List<RiepilogoRataSoggettoDTO>> loadDatiSoggetti = () => getRateCondominiService().GetRiepilogoRataSoggettoByEsercizio(_esercizio.ID, getRateRichiamate());
                formSoggetti.LoadData(loadDatiSoggetti);
                formSoggetti.ShowDialog();
                riepilogoRataSoggettoDTOBindingSource.DataSource = formSoggetti.DataSourceObject;
                formSoggetti.Dispose();

                var testoCausale = getRateCondominiService().GetCausale(_esercizio);
                if (testoCausale.Length > 94)
                    testoCausale = testoCausale.Substring(0, 94);
                causale.Text = testoCausale;

                intestazoneAzienda.Text = getRateCondominiService().GetIntestazioneMAVAzienda();

                mainTab.Tabs["parametri"].Enabled = true;
                mainTab.Tabs["riepilogoRate"].Enabled = false;
                mainTab.Tabs["emissione"].Enabled = false;
                mainTab.SelectedTab = mainTab.Tabs["parametri"];
                _avanzamento = AvanzamentoWizard.SceltaParametri;

                listaSoggetti.UpdateData();
                listaSoggetti.PerformAction(UltraGridAction.ExitEditMode);

                listaSoggetti.BeforeHeaderCheckStateChanged += listaSoggetti_BeforeHeaderCheckStateChanged;
                listaSoggetti.AfterHeaderCheckStateChanged += listaSoggetti_AfterHeaderCheckStateChanged;

            }
            else
            {
                CommonMessages.DisplayWarning("Non è stato definito alcun piano rateale.");
            }

        }
        private void setPianoRatealeDataSource(bool restoreRataResiduo, bool getRate)
        {
            // Reimposto il data source
            int? rataResiduo = null;
            if (restoreRataResiduo)
            {
                if (assegnazioneResiduo.Value != null && (int)assegnazioneResiduo.Value > -1)
                    rataResiduo = (int)assegnazioneResiduo.Value;
            }
            assegnazioneResiduo.ValueChanged -=assegnazioneResiduoValueChanged;
            assegnazioneResiduo.DataSource = null;

            if (!getRate)
            {
                var resultPianoRateale =  getRateCondominiService().CreatePianoRateale(new PianoRatealeDTO { IdEsercizio = _esercizio.ID, ArrontondamentoImporti = (decimal)arrotondamentoImporti.Value, ImportoMinimo = importoMinimo.Value, IdRendiconto = getIdRendiconto(), IdRataArrotondamenti = rataResiduo, Rate = (List<PianoRatealeDettaglioDTO>)pianoRatealeDettaglioDTOBindingSource.DataSource, Tipo = _tipo }, (int)numeroRate.Value, (List<RiepilogoRipartoDTO>)riepilogoRipartoBindingSource.DataSource);
                if (resultPianoRateale.Result != null)
                {
                    _pianoRateale = resultPianoRateale.Result;
                }
                else
                {
                    if (!string.IsNullOrEmpty(resultPianoRateale.FatalMessage))
                        CommonMessages.DisplayWarning(string.Format("Si sono verificati dei problemi nella creazione del piano rateale:{0}{1}", Environment.NewLine, resultPianoRateale.FatalMessage));
                    var mainContabilita = (MainContabilita)ParentForm;
                    if (mainContabilita != null)
                        mainContabilita.ToClose = true;
                }
            }
            else
            {
                var pianoRatealeSoggetti = getRateCondominiService().GetPianoRatealeSoggetti(new PianoRatealeDTO { IdEsercizio = _esercizio.ID, ArrontondamentoImporti = (decimal)arrotondamentoImporti.Value, ImportoMinimo = importoMinimo.Value, IdRendiconto = getIdRendiconto(), IdRataArrotondamenti = rataResiduo, Rate = (List<PianoRatealeDettaglioDTO>)pianoRatealeDettaglioDTOBindingSource.DataSource, Tipo = _tipo }, (int)numeroRate.Value, (List<RiepilogoRipartoDTO>)riepilogoRipartoBindingSource.DataSource);
                _pianoRateale = pianoRatealeSoggetti.PianoRateale;
                _rateSoggetti = pianoRatealeSoggetti.RateSoggetti;
                _saldiSoggetti = pianoRatealeSoggetti.SaldiSoggetti;
            }

            pianoRatealeDettaglioDTOBindingSource.DataSource = _pianoRateale.Rate;
            loadRataArrotondamento();
            rendicontoPreventivo.ValueChanged -= rendicontoPreventivoValueChanged;
            rendicontoPreventivo.Value = _pianoRateale.IdRendiconto;
            rendicontoPreventivo.ValueChanged += rendicontoPreventivoValueChanged;

            loadRataArrotondamento();
            assegnazioneResiduo.Value = rataResiduo;
            assegnazioneResiduo.ValueChanged += assegnazioneResiduoValueChanged;

            listaRate.DisplayLayout.Bands[0].Columns["PercentualeRiparto"].EditorComponent = percentageDataFilter;
            listaRate.DisplayLayout.Bands[0].Columns["PercentualeRipartoSaldo"].EditorComponent = percentageDataFilter;
        }
        private void load()
        {
            Visible = false;

            // --------------------------------------------------------
            // Controllo se è ammessa creazione del riparto
            // --------------------------------------------------------
            var importo = getBilancioService().GetImportoPreventivo(_esercizio.ID);
            if (importo != null)
            {
                var messaggio = getRateCondominiService().IsAllowNewPianoRateale(_esercizio.ID);

                if (string.IsNullOrEmpty(messaggio.FatalMessage))
                {
                    var result = DialogResult.Yes;
                    if(!string.IsNullOrEmpty(messaggio.WarnMessage))
                        result = CommonMessages.DisplayConfirm("ATTENZIONE: " + messaggio.WarnMessage + Environment.NewLine + "Vuoi confermare l'operazione?");

                    if(result == DialogResult.Yes)
                    {
                        importoDaRipartire.Text = importo.Value.ToString("c");
                        Visible = true;

                        hideShowControls(true);
                        numeroRate.ValueChanged -= numeroRateValueChanged;
                        arrotondamentoImporti.ValueChanged -= arrotondamentoImportiValueChanged;
                        numeroRate.Value = 4;
                        arrotondamentoImporti.SelectedIndex = 0;
                        numeroRate.ValueChanged += numeroRateValueChanged;
                        arrotondamentoImporti.ValueChanged += arrotondamentoImportiValueChanged;

                        // --------------------------------------------------------
                        // Caricamento primo tab del wizard
                        // --------------------------------------------------------
                        rendicontoBindingSource.DataSource = getBilancioService().GetRendicontiByEsercizio(_esercizio.ID, TipoRendiconto.Preventivo);
                        if (rendicontoBindingSource.Count == 1)
                        {
                            rendicontoPreventivo.ValueChanged -=rendicontoPreventivoValueChanged;
                            rendicontoPreventivo.SelectedIndex = 0;
                            rendicontoPreventivo.ValueChanged += rendicontoPreventivoValueChanged;
                        }

                        var form = new ExecuteLoadDataObjectAsync<ResultRiepilogoRipartoDTO>();
                        Func<ResultRiepilogoRipartoDTO> loadDati = () => getRateCondominiService().GetRiepilogoRiparto(_esercizio.ID, null, null, getIdRendiconto(), _tipo);
                        form.LoadData(loadDati);
                        form.ShowDialog();

                        if (form.DataSourceObject.RiepilogoRiparto != null)
                        {
                            riepilogoRipartoBindingSource.DataSource = form.DataSourceObject.RiepilogoRiparto;


                            form.Dispose();
                            hideShowControls(false);

                            //riepilogoRipartoBindingSource.DataSource = getRateCondominiService().GetRiepilogoRiparto(_esercizio.ID, null, null, getIdRendiconto());

                            if (listaRiepilogoRiparto.DisplayLayout.Bands[0].Summaries.Count == 0)
                            {
                                DataGridHelper.AddSummary(listaRiepilogoRiparto.DisplayLayout.Bands[0], "SaldoEsercizioPrecedente", "c");
                                DataGridHelper.AddSummary(listaRiepilogoRiparto.DisplayLayout.Bands[0], "TotaleADebito", "c");
                                DataGridHelper.AddSummary(listaRiepilogoRiparto.DisplayLayout.Bands[0], "Importo", "c");
                            }

                            // --------------------------------------------------------
                            // Caricamento secondo tab del wizard
                            // --------------------------------------------------------
                            int? rataAssegnazioneResiduo = null;
                            if (assegnazioneResiduo.Value != null && (int)assegnazioneResiduo.Value > -1)
                                rataAssegnazioneResiduo = (int)assegnazioneResiduo.Value;
                            var resultPianoRateale = getRateCondominiService().CreatePianoRateale(new PianoRatealeDTO { IdEsercizio = _esercizio.ID, ArrontondamentoImporti = (decimal)arrotondamentoImporti.Value, IdRendiconto = getIdRendiconto(), IdRataArrotondamenti = rataAssegnazioneResiduo, Tipo = _tipo }, (int)numeroRate.Value, (List<RiepilogoRipartoDTO>)riepilogoRipartoBindingSource.DataSource);
                            if (resultPianoRateale.Result != null)
                            {
                                _pianoRateale = resultPianoRateale.Result;
                                pianoRatealeDettaglioDTOBindingSource.DataSource = _pianoRateale.Rate;

                                loadRataArrotondamento();
                                rendicontoPreventivo.ValueChanged -= rendicontoPreventivoValueChanged;
                                rendicontoPreventivo.Value = _pianoRateale.IdRendiconto;
                                rendicontoPreventivo.ValueChanged += rendicontoPreventivoValueChanged;

                                if (listaRate.DisplayLayout.Bands[0].Summaries.Count == 0)
                                {
                                    DataGridHelper.AddSummary(listaRate.DisplayLayout.Bands[0], "PercentualeRipartoSaldo", "##.00%");
                                    DataGridHelper.AddSummary(listaRate.DisplayLayout.Bands[0], "PercentualeRiparto", "##.00%");
                                    DataGridHelper.AddSummary(listaRate.DisplayLayout.Bands[0], "Importo", "c");
                                }

                                assegnazioneResiduo.ValueChanged -= assegnazioneResiduoValueChanged;
                                assegnazioneResiduo.SelectedIndex = 0;
                                assegnazioneResiduo.ValueChanged += assegnazioneResiduoValueChanged;

                                mainTab.Tabs["pianoRateale"].Enabled = false;
                                mainTab.Tabs["rateSoggetti"].Enabled = false;
                                _avanzamento = AvanzamentoWizard.RiepilogoRiparto;

                                listaRiepilogoRiparto.PerformAction(UltraGridAction.EnterEditMode, false, false);
                                listaRiepilogoRiparto.UpdateData();
                            }
                            else
                            {
                                if (!string.IsNullOrEmpty(resultPianoRateale.FatalMessage))
                                    CommonMessages.DisplayWarning(string.Format("Si sono verificati dei problemi nella creazione del piano rateale:{0}{1}", Environment.NewLine, resultPianoRateale.FatalMessage));
                                var mainContabilita = (MainContabilita)ParentForm;
                                if (mainContabilita != null)
                                    mainContabilita.ToClose = true;
                            }
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(form.DataSourceObject.FatalMessage))
                                CommonMessages.DisplayWarning("Non è ammessa la creazione del piano rateale:" + Environment.NewLine + form.DataSourceObject.FatalMessage);
                            var mainContabilita = (MainContabilita)ParentForm;
                            if (mainContabilita != null)
                                mainContabilita.ToClose = true;
                        }

                    }
                }
                else
                {
                    CommonMessages.DisplayWarning("Non è ammessa la creazione del piano rateale:" + Environment.NewLine + messaggio.FatalMessage);
                    var mainContabilita = (MainContabilita)ParentForm;
                    if (mainContabilita != null) 
                        mainContabilita.ToClose = true;
                }
            }
            else
            {
                CommonMessages.DisplayWarning("Prima di definire il riparto rateale occorre generare il bilancio preventivo.");
                var mainContabilita = (MainContabilita)ParentForm;
                if (mainContabilita != null) 
                    mainContabilita.ToClose = true;
            }
        }
        public void LoadData(CondominioDTO condominio, EsercizioDTO esercizio, List<RataSoggettoDTO> rateSoggetti, List<ImportoSaldoSoggettoDTO> saldiSoggetti, IList<RiepilogoRipartoDTO> riepilogoRiparto, TipoListaRate tipoLista, bool isCreazione, TipoAccorpamentoRateEnum tipo)
        {
            try
            {
                _tipo = tipo;
                _condominio = condominio;
                _esercizio = esercizio;
                _rateSoggetti = rateSoggetti;
                _saldiSoggetti = saldiSoggetti;
                _riepilogoRiparto = riepilogoRiparto;
                _isCreazione = isCreazione;

                loadConti();
                _pianoRateale = getRateCondominiService().GetPianoRatealeByEsercizio(_esercizio.ID, false) ?? new PianoRatealeDTO { Tipo = tipo };
                _pianoRateale.Tipo = tipo;

                if (_isCreazione)
                {
                    btnStampa.Visible = false;
                    nuovaDataPanel.Visible = false;
                }
                else
                {
                    btnStampa.Visible = true;
                    nuovaDataPanel.Visible = true;
                }

                sceltaTipoLista.Value = tipoLista.ToString().ToLower();

                // Se è ancora a null carico la lista dei soggetti relativi al condominio.
                if (_soggetti == null)
                    _soggetti = getRateCondominiService().GetPartecipanti(_condominio.ID, _tipo);

                if(tipoLista == TipoListaRate.Pivot)
                {
                    try
                    {
                        var resultMessage = getRateCondominiService().ConvertRateSoggettiToPivot(rateSoggetti, _saldiSoggetti, riepilogoRiparto, _allowInvertiSegno, _pianoRateale, _isCreazione);
                        if (resultMessage.DataTable == null)
                        {
                            CommonMessages.DisplayWarning(string.Format("Si sono verificati i seguenti errori:{1}{0}{1}Si prega di riprovare", resultMessage.FatalMessage, Environment.NewLine));
                            ParentForm?.Close();
                            return;
                        }
                        else
                        {
                            listaRateSoggetti.DataSource = resultMessage.DataTable;
                            setGridLayout(tipoLista);
                            setRowsLayout();
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato durante il caricamento dei dati del piano rateale - DataSource di listaRateSoggetti - {0} - condominio:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), _condominio.ID, _esercizio.ID);
                        throw;
                    }
                }
                else if (tipoLista == TipoListaRate.Editabile)
                {
                    var dataSourceEditabile = rateSoggetti;
                    if (!_isCreazione)
                        dataSourceEditabile = new List<RataSoggettoDTO>(dataSourceEditabile.Where(item => item.ID > 0 && item.Importo > 0).ToList());

                    listaRateSoggetti.DataSource = new System.ComponentModel.BindingList<RataSoggettoDTO>(dataSourceEditabile);

                    listaRateSoggetti.DisplayLayout.ValueLists.Clear();
                    listaRateSoggetti.DisplayLayout.ValueLists.Add(DataSourceHelper.GetValueList(_soggetti, "ID", "DisplayNominativo", "SoggettiCondominio"));
                    listaRateSoggetti.DisplayLayout.Bands[0].Columns["IdSoggettoCondominio"].ValueList = listaRateSoggetti.DisplayLayout.ValueLists["SoggettiCondominio"];
                    setGridLayout(tipoLista);
                }
        
                listaRateSoggetti.DisplayLayout.Bands[0].Summaries.Clear();
                foreach (var column in listaRateSoggetti.DisplayLayout.Bands[0].Columns)
                {
                    if(column.DataType == typeof(decimal))
                        DataGridHelper.AddSummary(listaRateSoggetti.DisplayLayout.Bands[0], column.Key, "c");
                }

                btnConferma.Visible = false;
                listaRateSoggetti.PerformAction(UltraGridAction.FirstRowInBand);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante il caricamento dei dati del piano rateale - 2 - {0} - condominio:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), _condominio.ID, _esercizio.ID);
                throw;
            }
        }
 public PianoRatealeSoggetti GetPianoRatealeSoggetti(PianoRatealeDTO pianoRateale, int numeroRate, List<RiepilogoRipartoDTO> riepilogo)
 {
     var result = GetServiceClient().GetPianoRatealeSoggetti(pianoRateale, numeroRate, riepilogo, GetUserInfo());
     CloseService();
     return result;
 }
Exemple #16
0
 public PianoRatealeSoggetti(PianoRatealeDTO pianoRateale, List<ImportoSaldoSoggettoDTO> saldiSoggetti, List<RataSoggettoDTO> rateSoggetti)
 {
     PianoRateale = pianoRateale;
     RateSoggetti = rateSoggetti;
     SaldiSoggetti = saldiSoggetti;
 }
Exemple #17
0
        public ResultMessages<PianoRatealeDTO> CreatePianoRateale(PianoRatealeDTO pianoRateale, int numeroRate, IList<RiepilogoRipartoDTO> riepilogoRiparto, UserInfo userinfo)
		{
			var windsorRep = new WindsorConfigRepository();
		    try
		    {
		        windsorRep.BeginTransaction(userinfo);
		        var rateService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IRateService>();
		        var item = rateService.CreatePianoRateale(pianoRateale, numeroRate, riepilogoRiparto);
		        windsorRep.Commit();
		        return new ResultMessages<PianoRatealeDTO>(item, null, null);
		    }
		    catch (InvalidDataException ex)
		    {
		        return new ResultMessages<PianoRatealeDTO>(null, ex.Message, null);
		    }
			catch (Exception ex)
			{
                _log.ErrorFormat("Errore nella esecuzione della funzione - {0} - esercizio:{1} - numeroRate:{2} - azienda:{3}", ex, Utility.GetMethodDescription(), pianoRateale.IdEsercizio, numeroRate, userinfo.Azienda);
                windsorRep.Rollback();
				throw;
			}
		}