Example #1
1
        public void testNullableDateTimeGetValueOrDefault()
        {
            DateTime? e = null;

            DateTime def = e.GetValueOrDefault();
            Assert.AssertEquals(default(DateTime), def);
            
            e = new DateTime(2002, 2, 2);
            def = e.GetValueOrDefault();
            Assert.AssertEquals(new DateTime(2002, 2, 2), def);

            e = null;
            def = e.GetValueOrDefault();
            Assert.AssertEquals( default(DateTime), def);
        }
 internal static bool IsBirthday(DateTime? birthday)
 {
     DateTime bday = birthday.GetValueOrDefault();
     if (bday > DateTime.Today)
         return false;
     return true;
 }
        public void Update(Account selectedAccount, DateTime? start, DateTime? end)
        {
            Start = start;
            End = end;
            var transactions = Dao.Query(GetCurrentRange(start, end, x => x.AccountId == selectedAccount.Id)).OrderBy(x => x.Date);
            Transactions = transactions.Select(x => new AccountDetailData(x, selectedAccount)).ToList();
            if (start.HasValue)
            {
                var pastDebit = Dao.Sum(x => x.Debit, GetPastRange(start, x => x.AccountId == selectedAccount.Id));
                var pastCredit = Dao.Sum(x => x.Credit, GetPastRange(start, x => x.AccountId == selectedAccount.Id));
                var pastExchange = Dao.Sum(x => x.Exchange, GetPastRange(start, x => x.AccountId == selectedAccount.Id));
                if (pastCredit > 0 || pastDebit > 0)
                {
                    Summaries.Add(new AccountSummaryData(Resources.TransactionTotal, Transactions.Sum(x => x.Debit), Transactions.Sum(x => x.Credit)));
                    var detailValue =
                        new AccountDetailData(
                        new AccountTransactionValue
                        {
                            Date = start.GetValueOrDefault(),
                            Name = Resources.BalanceBroughtForward,
                            Credit = pastCredit,
                            Debit = pastDebit,
                            Exchange = pastExchange
                        }, selectedAccount) { IsBold = true };
                    Transactions.Insert(0, detailValue);
                }
            }
            if (end.HasValue && end != start)
            {
                var futureDebit = Dao.Sum(x => x.Debit, GetFutureRange(end, x => x.AccountId == selectedAccount.Id));
                var futureCredit = Dao.Sum(x => x.Credit, GetFutureRange(end, x => x.AccountId == selectedAccount.Id));
                var futureExchange = Dao.Sum(x => x.Exchange, GetFutureRange(end, x => x.AccountId == selectedAccount.Id));
                if (futureCredit > 0 || futureDebit > 0)
                {
                    Summaries.Add(new AccountSummaryData(Resources.DateRangeTotal, Transactions.Sum(x => x.Debit), Transactions.Sum(x => x.Credit)));
                    var detailValue =
                        new AccountDetailData(
                        new AccountTransactionValue
                        {
                            Date = end.GetValueOrDefault(),
                            Name = Resources.BalanceAfterDate,
                            Credit = futureCredit,
                            Debit = futureDebit,
                            Exchange = futureExchange
                        }, selectedAccount) { IsBold = true };
                    Transactions.Add(detailValue);
                }
            }

            Summaries.Add(new AccountSummaryData(Resources.GrandTotal, Transactions.Sum(x => x.Debit), Transactions.Sum(x => x.Credit)));

            for (var i = 0; i < Transactions.Count; i++)
            {
                Transactions[i].Balance = (Transactions[i].Debit - Transactions[i].Credit);
                if (i > 0) (Transactions[i].Balance) += (Transactions[i - 1].Balance);
            }
        }
 public static int AgeAt(this DateTime dt, DateTime? atDate = null)
 {
     var ageAtDate = atDate.GetValueOrDefault(DateTime.UtcNow).Date;
     var age = ageAtDate.Year - dt.Year;
     if (dt > ageAtDate.AddYears(-age)) age--;
     return age;
 }
        public static ShoeTrackerDbContext WithShoe(this ShoeTrackerDbContext context, 
            string name, 
            string userId,
            DateTime? firstUsedDate=null, 
            DateTime? lastUsedDate=null, 
            decimal? maximumDistance=null,
            string brand=null)
        {
            var maxShoeId = 1L;
            if (context.Shoes.Any())
            {
                maxShoeId = context.Shoes.Max(s => s.ShoeId);
            }
            var shoe = new Shoe
            {
                CreatedAt = DateTime.Now,
                FirstUsed = firstUsedDate.GetValueOrDefault(DateTime.Today),
                LastUsed = lastUsedDate,
                MaximumDistance = maximumDistance.GetValueOrDefault(400),
                Name = name,
                Brand = brand ?? "default brand",
                Workouts = new List<Workout>(),
                ShoeId = maxShoeId+1,
                UserId = userId
            };

            context.Shoes.Attach(shoe);

            return context;
        }
        public static MapMyFitnessApi WithWorkout(this MapMyFitnessApi api,
            int externalUserId,
            string accessToken,
            string name,
            decimal? distanceInMiles = null,
            string workoutId = null,
            DateTime? workoutDate = null,
            string activityType = "16",
            DateTime? lastWorkoutImported = null)
        {
            var workouts = api.GetWorkoutsByUser(externalUserId, accessToken,lastWorkoutImported);

            var distance = System.Convert.ToDouble(distanceInMiles.GetValueOrDefault(2)*(1/0.000621371m));
            workouts.Add(new Workout
            {
                name = name,
                start_datetime = workoutDate.GetValueOrDefault(DateTime.Now).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"),
                _links = new Links
                {
                    self = new List<Next>
                    {
                        new Next { id = workoutId ?? Guid.NewGuid().ToString()}
                    },
                    activity_type = new List<Next>
                    {
                        new Next { id = activityType}
                    },
                },
                aggregates = new WorkoutAggregate { distance_total = distance}
            });

            api.GetWorkoutsByUser(externalUserId, accessToken, lastWorkoutImported).Returns(workouts);

            return api;
        }
 public CompletedChore(Chore c, DateTime? completionDate = null, string completedBy = "")
 {
     ChoreName = c.ChoreName;
     CompletionDate = completionDate.GetValueOrDefault (DateTime.Now);
     CompletedBy = completedBy;
     ParentChoreId = c.ID;
 }
Example #8
0
 public void Stop(DateTime? stopTime, string comment, IDateTimeService dateTimeService)
 {
     if (lastStartTime == null)
     {
         throw new InvalidOperationException("Task already stopped");
     }
     ApplyChange(new TaskStopped(id, stopTime.GetValueOrDefault(dateTimeService.GetUtcNow()), comment));
 }
Example #9
0
 /// <summary>
 /// A method to try to assign the value of the nullable DateTime instance. If the value is null, check off DateTimePicker control. Assign the value to DateTimePicker.Value property otherwise.
 /// </summary>
 /// <param name="dateTimePicker">DateTimePicker control to execute method for.</param>
 /// <param name="dateTime">Nullable DateTime instance to check for the value.</param>
 public static void TryToAssignValue(this DateTimePicker dateTimePicker, DateTime? dateTime)
 {
     if(dateTime.GetValueOrDefault() < dateTimePicker.MinDate || dateTime.GetValueOrDefault() > dateTimePicker.MaxDate)
     {
         dateTime = null;
     }
     if(dateTime == null)
     {
         dateTimePicker.Value = DateTime.Now;
         dateTimePicker.Checked = false;
     }
     else
     {
         dateTimePicker.Checked = true;
         dateTimePicker.Value = (DateTime)dateTime;
     }
 }
Example #10
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="htmlHeler"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string EncodeDateTime(this HtmlHelper htmlHeler, DateTime? value)
        {
            if (value == null)
            {
                return string.Empty;
            }

            return htmlHeler.EncodeDateTime(value.GetValueOrDefault());
        }
        internal static bool IsATimeBiggerThanBTime(DateTime? ATime, DateTime? BTime)
        {
            DateTime atime = ATime.GetValueOrDefault();
            DateTime btime = BTime.GetValueOrDefault();

            if (atime > btime)
                return true;
            else
                return false;
        }
Example #12
0
 public static Employee Generate(string id = null, string name = null, int? age = null, string companyName = null, string companyId = null, DateTime? createdUtc = null, DateTime? updatedUtc = null) {
     return new Employee {
         Id = id,
         Name = name ?? RandomData.GetAlphaString(),
         Age = age ?? RandomData.GetInt(18, 100),
         CompanyName = companyName ?? RandomData.GetAlphaString(),
         CompanyId = companyId ?? ObjectId.GenerateNewId().ToString(),
         CreatedUtc = createdUtc.GetValueOrDefault(),
         UpdatedUtc = updatedUtc.GetValueOrDefault()
     };
 }
Example #13
0
        public static int CalculateAge(DateTime? birthdate)
        {
            DateTime bday = birthdate.GetValueOrDefault(DateTime.Now);

            var age = DateTime.Now.Year - bday.Year;

            //om man inte fyllt år i år så tar den bort 1år från age för att få rätt ålder
            if ((DateTime.Now.Month <= bday.Month) ||
                (DateTime.Now.Day >= bday.Day && DateTime.Now.Month <= bday.Month)) age--;

            return age;
        }
Example #14
0
        /// <summary>
        /// Returns random date gen
        /// </summary>
        /// <param name="min">if not supplied, DateTime.MinValue is used</param>
        /// <param name="max">if not supplied, DateTime.MaxValue is used</param>
        public Func<DateTime> Dates(DateTime? min = null, DateTime? max = null)
        {
            var minDate = min.GetValueOrDefault(DateTime.MinValue);
            var maxDate = max.GetValueOrDefault(DateTime.MaxValue);

            if (minDate >= maxDate)
                throw new ArgumentOutOfRangeException("min >= max");

            var ticksSpan = maxDate.Ticks - minDate.Ticks;
            var factory = _random.Numbers.Doubles().BetweenZeroAndOne();

            return () => new DateTime(Convert.ToInt64(minDate.Ticks + ((double)ticksSpan * factory())));
        }
        public List<MovimentoContabileBilancioDTO> GetDettaglioPartitario(EsercizioDTO esercizioDTO, IList<ContoDTO> conti, List<string> sottoconti, DateTime? dataIniziale, DateTime? dataFinale)
        {
            var idConti = conti.Select(conto => conto.ID).ToList();
            if (esercizioDTO != null)
            {
                dataIniziale = esercizioDTO.DataApertura;
                dataFinale = esercizioDTO.DataChiusura;
            }

            var result = GetServiceClient().GetDettaglioPartitario(idConti, sottoconti, dataIniziale.GetValueOrDefault(), dataFinale.GetValueOrDefault(), GetUserInfo());
            CloseService();
            return result;
        }
Example #16
0
        public string GetRange(DateTime? fromDate, DateTime? toDate)
        {
            if (fromDate == null && toDate == null)
            return "all records";

              var d1 = fromDate.GetValueOrDefault().ToString(Constants.DATE_FORMAT);
              var d2 = toDate.GetValueOrDefault().ToString(Constants.DATE_FORMAT);

              if (fromDate == null)
            return string.Format("records before {0}", d2);
              if (toDate == null)
            return string.Format("records after {0}", d1);
              return string.Format("records between {0} and {1}", d1, d2);
        }
Example #17
0
        public static List<KWSLog> GetKWSLog(KWSLogType kWSLogType, string engNum = null, DateTime? fromDt = null, DateTime? toDt = null)
        {
            var fDate = fromDt.GetValueOrDefault(DateTime.MinValue).ToUniversalTime();
            var tDate = toDt.GetValueOrDefault(DateTime.Now).GetToDate().ToUniversalTime();

            using (KDBContext db = new KDBContext())
            {
                using (var tran = db.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
                {
                    List<KWSLog> result = null;

                    if (!string.IsNullOrWhiteSpace(engNum))
                    {
                        if (kWSLogType == KWSLogType.CreateWS)
                            result = db.KWSLog.Where(x => x.EngNum == engNum
                                && (x.KWSLogType == KWSLogType.CreateWSAuto || x.KWSLogType == KWSLogType.CreateWSManual || x.KWSLogType == KWSLogType.CreateWSFail)
                                && x.InsertWhen >= fDate
                                && x.InsertWhen <= tDate
                                )
                                .OrderByDescending(x => x.InsertWhen).ToList();
                        else
                            result = db.KWSLog.Where(x => x.EngNum == engNum && x.KWSLogType == kWSLogType
                                && x.InsertWhen >= fDate
                                && x.InsertWhen <= tDate
                                ).OrderByDescending(x => x.InsertWhen).ToList();
                    }
                    else
                    {
                        if (kWSLogType == KWSLogType.CreateWS)
                            result = db.KWSLog.Where(x => (x.KWSLogType == KWSLogType.CreateWSAuto || x.KWSLogType == KWSLogType.CreateWSManual || x.KWSLogType == KWSLogType.CreateWSFail)
                                && x.InsertWhen >= fDate
                                && x.InsertWhen <= tDate
                                )

                                .OrderByDescending(x => x.InsertWhen).ToList();
                        else
                            result = db.KWSLog.Where(x => x.KWSLogType == kWSLogType
                                && x.InsertWhen >= fDate
                                && x.InsertWhen <= tDate
                                ).OrderByDescending(x => x.InsertWhen).ToList();
                    }

                    return result;
                }
            }
        }
 // GET: WorkContent/WorkGroup
 public ActionResult Index(Guid? depId, DateTime? selectTime)
 {
     var departmentServices = ServiceLocator.Instance.GetService<IDepartmentServices>();
     var departments = new List<ShowDepartment>();
     departments.Add(new ShowDepartment() { Name = "全部" });
     departments.AddRange(departmentServices.Get());
     ViewBag.Department = new HtmlString(departments.ToJson());
     var workRecordServices = ServiceLocator.Instance.GetService<IWorkRecordServices>();
     if (selectTime.Null())
     {
         selectTime = DateTime.Now;
     }
     var showWorkRecords = workRecordServices.GetAllRecords(selectTime.GetValueOrDefault(), depId.GetValueOrDefault());
     ViewBag.DepId = depId.GetValueOrDefault();
     ViewBag.selectTime = selectTime;
     return PartialView(new HtmlString(showWorkRecords.ToJson()));
 }
        static void Main(string[] args)
        {
            DateTime? date = null;
            // == Nullable<DateTime> date = null;

            Console.WriteLine(date.GetValueOrDefault());
            Console.WriteLine(date.HasValue);
            //Console.WriteLine(date.Value);

            DateTime? date2 = new DateTime(2014, 1, 1);
            DateTime date3 = date2.GetValueOrDefault();
            Console.WriteLine(date3);

            Console.WriteLine(DateTime.Today);

            DateTime? d = null;
            DateTime d2 = d ?? DateTime.Today;
        }
 private Expression<Func<AccountTransactionValue, bool>> GetCurrentRange(DateTime? start, DateTime? end, Expression<Func<AccountTransactionValue, bool>> activeSpecification)
 {
     var result = activeSpecification;
     if (start.HasValue)
     {
         var currentStart = start.GetValueOrDefault();
         result = result.And(x => x.Date >= currentStart);
         if (end.HasValue)
         {
             var currentEnd = end.GetValueOrDefault();
             if (end != start)
             {
                 result = result.And(x => x.Date <= currentEnd);
             }
         }
     }
     return result;
 }
Example #21
0
        protected CreditCard(IPerson cardholder, DateTime? openedDate, DateTime? expiryDate)
        {
            CardHolderSince = openedDate.GetValueOrDefault(DateTime.Now);

            if (expiryDate == null)
            {
                ExpDate = Etx.Date(Etx.IntNumber(4, 6), null);
                ExpDate = new DateTime(ExpDate.Year, ExpDate.Month, Etx.CoinToss ? 1 : 15);
            }
            else
            {
                ExpDate = expiryDate.Value;
            }

            CardHolderName = string.Join(" ", cardholder.FirstName.ToUpper(), cardholder.LastName.ToUpper());
            Cvv = $"{Etx.IntNumber(7, 999),3:D3}";
            Number = GetRandomCardNumber();
        }
        public IQueryable<ExamInstanceQuestion> GetQuery_StudentAnswers(int studentId, DateTime? statisticsThreshold)
        {
            var query = from instance in this.DbContext.ExamInstances
                        join answered in this.DbContext.ExamInstanceQuestions
                            on new
                            {
                                StudentId = instance.StudentId,
                                ExamInstanceId = instance.Id,
                                HasAnswer = true
                            }
                            equals new
                            {
                                StudentId = studentId,
                                ExamInstanceId = answered.ExamInstanceId,
                                HasAnswer = answered.AnswerId != null
                            }
                        where statisticsThreshold.GetValueOrDefault(DateTime.MinValue) < answered.UtcDateUpdated
                        select answered;

            return query;
        }
Example #23
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Handle"/> class.
        /// </summary>
        /// <param name="uniqueString">The unique string.</param>
        /// <param name="approximateLocation">The approximate location.</param>
        /// <param name="epoch">The epoch which will be converted to Unix Timestamp internally.</param>
        public Handle(string uniqueString, Coordinate approximateLocation = null, DateTime? epoch = null)
        {
            if (uniqueString == null)
            {
                throw new ArgumentNullException("uniqueString");
            }

            if (string.IsNullOrWhiteSpace(uniqueString))
            {
                throw new ArgumentOutOfRangeException("uniqueString", "Must contain an unique string");
            }

            this.UniqueString = uniqueString;

            if (approximateLocation != null)
            {
                this.ApproximateLocation = approximateLocation;
            }

            if (epoch != null)
            {
                this.Epoch = epoch.GetValueOrDefault();
            }
        }
Example #24
0
        public System.Data.DataTable ListAsDataTable(Int32 BranchID, string TerminalNo = "", Int64 TransactionID = 0, string TransactionNo = "", DateTime? TransactionDateFrom = null, DateTime? TransactionDateTo = null,
                                                    TransactionStatus TransactionStatus = TransactionStatus.NotYetApplied, PaymentTypes PaymentType = PaymentTypes.NotYetAssigned, bool isConsignment = false, bool isPacked = false,
                                                    string CustomerName = "", string CustomerGroupName = "", Int64 CashierID = 0, string CashierName = "", string AgentName = "",
                                                    bool WithTF = false, bool ShowSuspendedOnly = false, string SortField = "", SortOption SortOption = SortOption.Ascending, Int32 limit = 0)
        {
            try
            {
                MySqlCommand cmd = new MySqlCommand();
                cmd.CommandType = System.Data.CommandType.Text;

                string SQL = "CALL procTransactionsSelect(@BranchID, @TerminalNo, @TransactionID, @TransactionNo, @TransactionDateFrom, " +
                                                         "@TransactionDateTo, @TransactionStatus, @PaymentType, @isConsignment, @isPacked, @CustomerName, " +
                                                         "@CustomerGroupName, @CashierID, @CashierName, @AgentName, @WithTF, @ShowSuspended, " +
                                                         "@SortField, @SortOption, @Limit);";

                cmd.Parameters.AddWithValue("BranchID", BranchID);
                cmd.Parameters.AddWithValue("TerminalNo", TerminalNo);
                cmd.Parameters.AddWithValue("TransactionID", TransactionID);
                cmd.Parameters.AddWithValue("TransactionNo", TransactionNo);
                cmd.Parameters.AddWithValue("TransactionDateFrom", TransactionDateFrom.GetValueOrDefault() == DateTime.MinValue ? Constants.C_DATE_MIN_VALUE : TransactionDateFrom);
                cmd.Parameters.AddWithValue("TransactionDateTo", TransactionDateTo.GetValueOrDefault() == DateTime.MinValue ? Constants.C_DATE_MIN_VALUE : TransactionDateTo);
                cmd.Parameters.AddWithValue("TransactionStatus", TransactionStatus.ToString("d"));
                cmd.Parameters.AddWithValue("PaymentType", PaymentType.ToString("d"));
                cmd.Parameters.AddWithValue("isConsignment", isConsignment);
                cmd.Parameters.AddWithValue("isPacked", isPacked);
                cmd.Parameters.AddWithValue("CustomerName", CustomerName);
                cmd.Parameters.AddWithValue("CustomerGroupName", CustomerGroupName);
                cmd.Parameters.AddWithValue("CashierID", CashierID);
                cmd.Parameters.AddWithValue("CashierName", CashierName);
                cmd.Parameters.AddWithValue("AgentName", AgentName);
                cmd.Parameters.AddWithValue("WithTF", WithTF);
                cmd.Parameters.AddWithValue("ShowSuspended", ShowSuspendedOnly);
                cmd.Parameters.AddWithValue("SortField", SortField);
                cmd.Parameters.AddWithValue("SortOption", SortOption==SortOption.Ascending ? "ASC" : "DESC");
                cmd.Parameters.AddWithValue("Limit", limit);

                cmd.CommandText = SQL;
                string strDataTableName = "tbl" + this.GetType().FullName.Split(new Char[] { '.' })[this.GetType().FullName.Split(new Char[] { '.' }).Length - 1]; System.Data.DataTable dt = new System.Data.DataTable(strDataTableName);
                base.MySqlDataAdapterFill(cmd, dt);

                return dt;
            }
            catch (Exception ex)
            {
                throw base.ThrowException(ex);
            }
        }
Example #25
0
        public IList<TestataSollecitoDTO> GetSolleciti(int? idEsercizio, Dictionary<int, TipoIndirizzo> idCondomini, bool groupByPersone, DateTime? dataRate, DateTime? dataVersamenti, decimal? importoLimite, decimal? importoCompetenza, DateTime dataSollecito, bool stampaProprietario, int? idBanca, int idModelloLettera, string testoModelloLettera, DateTime? dataRegistrazioneContabile, int? idConto, int? idSottoConto, bool storico, bool sollecitaProprietarioConduzione)
        {
            try
            {
                var solleciti = new List<TestataSollecitoDTO>(idCondomini.Count);
                var listaSolleciti = new List<Sollecito>(idCondomini.Count);

                Esercizio esercizio = null;
                if (idEsercizio != null)
                    esercizio = _daoFactory.GetEsercizioDao().GetById(idEsercizio.Value, false);

                var dataFinale = new DateTime(DateTime.Today.Year, 12, 31);

                var modello = _daoFactory.GetModelloLetteraTestoDao().Find(idModelloLettera, false);

                // ==========================================================================================
                //  Leggo subito tutti i soggetti le rate e i versamenti
                // ==========================================================================================
                var idCondominiList = idCondomini.Select(item => item.Key).ToList();

                // rate
                var rateSoggetti = !groupByPersone ? _daoFactory.GetRataSoggettoDao().GetByEsercizioSoggetti(idEsercizio, null, idCondominiList, dataRate) : _daoFactory.GetRataSoggettoDao().GetByEsercizioPersone(idEsercizio, null, idCondominiList, dataRate);

                // soggetti
                IList<SoggettoCondominio> soggetti = null;
                IList<SoggettoCondominio> soggettiStampa = null;
                IList<Persona> persone = null;
                if (!groupByPersone)
                    soggetti = _daoFactory.GetSoggettoCondominioDao().GetAttiviByEsercizioSoggetti(esercizio, idCondominiList);
                else
                {
                    persone = _daoFactory.GetPersonaDao().GetAttiviByEsercizioSoggetti(esercizio, idCondominiList);
                    soggettiStampa = esercizio != null ? _daoFactory.GetSoggettoCondominioDao().GetAttiviByEsercizio(esercizio, dataFinale) : _daoFactory.GetSoggettoCondominioDao().GetAttiviByAzienda(modello.Azienda.ID);
                }

                // versamenti
                IList<VersamentoSoggetto> versamentiSoggetto;
                IList<VersamentiRate> versamentiRate;
                if (!groupByPersone)
                {
                    versamentiSoggetto = _daoFactory.GetVersamentoSoggettoDao().GetByEsercizioSoggetti(idEsercizio, idCondominiList);
                    versamentiRate = _daoFactory.GetVersamentiRateDao().GetByEsercizioSoggetti(idEsercizio, idCondominiList);
                }
                else
                {
                    versamentiSoggetto = _daoFactory.GetVersamentoSoggettoDao().GetByEsercizioPersone(idEsercizio, idCondominiList);
                    versamentiRate = _daoFactory.GetVersamentiRateDao().GetByEsercizioPersone(idEsercizio, idCondominiList);
                }

                DatiBancariCondomini bancaSollecito = null;
                if (idBanca != null)
                    bancaSollecito = _daoFactory.GetDatiBancariCondominiDao().Find(idBanca.Value, false);

                // ==========================================================================================
                //  Loop per i soggetti per generare i dati di stampa
                // ==========================================================================================
                foreach (var kvp in idCondomini)
                {
                    var id = kvp.Key;

                    try
                    {
                        SoggettoCondominio soggetto = null;
                        Persona persona = null;
                        if (soggetti != null)
                            soggetto = soggetti.FirstOrDefault(item => item.ID == kvp.Key) ?? _daoFactory.GetSoggettoCondominioDao().Find(id, false);
                        else if (persone != null)
                            persona = persone.FirstOrDefault(item => item.ID == kvp.Key) ?? _daoFactory.GetPersonaDao().Find(id, false);

                        if (persona == null && soggetto == null)
                        {
                            _log.ErrorFormat("Non trovata persona/soggetto - {0} - id:{1} - idCondomini:{2}", Utility.GetMethodDescription(), id, idEsercizio.GetValueOrDefault(), idCondomini != null ? string.Join(",", idCondomini.SelectMany(item => item.Key.ToString())) : "<NULL>");
                            continue;
                        }

                        var rateScadute = !groupByPersone ? rateSoggetti.Where(item => item.Soggetto.ID == kvp.Key).ToList() : rateSoggetti.Where(item => item.Soggetto.Persona.ID == kvp.Key).ToList();

                        // -----------------------------
                        // Calcolo importi
                        // -----------------------------
                        var importoScaduto = rateScadute.Sum(rata => rata.Importo);
                        var importoVersato = rateScadute.Sum(rata => rata.GetImportoVersato(dataVersamenti));

                        decimal importoVersatoSenzaRata;
                        IList<VersamentoSoggetto> altriVersamenti;
                        IList<VersamentiRate> altriVersamentiRate;
                        if (soggetto != null)
                        {
                            altriVersamenti = versamentiSoggetto.Where(item => item.Soggetto.ID == kvp.Key).ToList();
                            altriVersamentiRate = versamentiRate.Where(item => item.Versamento.Soggetto.ID == kvp.Key).ToList();
                            importoVersatoSenzaRata = altriVersamenti.Sum(versamento => versamento.Importo) - altriVersamentiRate.Sum(item => item.Importo);
                        }
                        else
                        {
                            altriVersamenti = versamentiSoggetto.Where(item => item.Soggetto.Persona.ID == kvp.Key).ToList();
                            altriVersamentiRate = versamentiRate.Where(item => item.Versamento.Soggetto.Persona.ID == kvp.Key).ToList();
                            importoVersatoSenzaRata = altriVersamenti.Sum(versamento => versamento.Importo) - altriVersamentiRate.Sum(item => item.Importo);
                        }

                        var importoDaSollecitare = importoScaduto - importoVersato - importoVersatoSenzaRata;

                        if (importoLimite == null || Math.Abs(importoDaSollecitare) >= importoLimite.Value)
                        {
                            if (persona == null)
                                persona = soggetto.Persona;
                            var condominio = soggetto != null ? soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento : persona.SoggettiCondominio.Select(item => item.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento).FirstOrDefault();

                            var recapito = _personaService.GetRecapito(persona, kvp.Value);

                            if (bancaSollecito == null)
                                bancaSollecito = condominio.DatiBancariPrincipale;

                            var testata = new TestataSollecitoDTO
                            {
                                Nominativo = getNominativoPresso(persona, soggetto, recapito),
                                Indirizzo = recapito != null ? recapito.GetIndirizzoCompleto() : string.Empty,
                                Cap = recapito.Cap,
                                Comune = recapito.ComuneDisplayName,
                                Titolo = Decodifica.Instance.GetElement("TitoloPersona", persona.Titolo).Descrizione,
                                ImportoCompetenza = importoCompetenza,
                                DataLettera = dataSollecito,
                                DataRate = dataRate.GetValueOrDefault(),
                                StampaProprietario = stampaProprietario,
                                GroupByPersona = groupByPersone,
                                OggettoLettera = string.IsNullOrEmpty(modello.Oggetto) ? string.Empty : modello.Oggetto.Trim(),
                                TestoLettera = formattaTestoLettera(condominio, bancaSollecito, string.IsNullOrEmpty(testoModelloLettera) ? modello.Testo : testoModelloLettera.Trim()),
                            };

                            if (soggetto != null)
                            {
                                testata.Id = soggetto.ID;
                                testata.IdSoggettoCondominio = soggetto.ID;
                                testata.IdPersona = soggetto.Persona.ID;
                                testata.IdUnitaImmobiliare = soggetto.UnitaImmobiliare.ID;
                                testata.Interno = soggetto.UnitaImmobiliare.InternoCompleto;
                                testata.Piano = soggetto.UnitaImmobiliare.Piano;
                                testata.Ordine = soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault();
                                testata.DescrizioneUnitaImmobiliare = soggetto.UnitaImmobiliare.Descrizione;
                                testata.Subalterno = soggetto.UnitaImmobiliare.Subalterno;
                            }
                            else if (persona != null)
                            {
                                testata.Id = persona.ID;
                                testata.IdPersona = persona.ID;
                            }

                            var righeCondominio = condominio.IndirizzoCompleto.Split('&');
                            testata.DescrizioneCompletaCondominio = $"Condominio: {righeCondominio[0]}{Environment.NewLine}{righeCondominio[1]} - {righeCondominio[2]} - {righeCondominio[3]}";

                            // Se la stampa è per persona e viee richiesta la stampa per conoscenza al proprietario occorre leggere il soggettocondominio (soggettoStampa) bugid#8573
                            var soggettoStampa = soggetto;
                            if (soggettoStampa == null && persona != null)
                                soggettoStampa = soggettiStampa.Where(item => item.Persona.ID == persona.ID).OrderBy(item => item.UnitaImmobiliare.TipoUnitaImmobiliare.ID).FirstOrDefault();

                            if (stampaProprietario && soggettoStampa != null && soggettoStampa.Tipo == TipoSoggetto.Conduttore)
                            {
                                var proprietario = soggettoStampa.UnitaImmobiliare.GetProprietarioPrincipale(dataFinale) ??
                                                   soggettoStampa.UnitaImmobiliare.Proprietari.OrderByDescending(item => item.DataInizio.GetValueOrDefault()).FirstOrDefault();
                                if (proprietario != null)
                                    testata.NominativoProprietario = proprietario.DisplayName;

                                if (proprietario != null)
                                {
                                    var recapitoProprietario = _personaService.GetRecapito(proprietario.Persona, kvp.Value);
                                    if (recapitoProprietario != null)
                                    {
                                        testata.IndirizzoProprietario = recapitoProprietario.GetIndirizzoCompleto();
                                        testata.ComuneProprietario = recapitoProprietario.ComuneDisplayName;
                                        testata.CapProprietario = recapitoProprietario.Cap;
                                    }
                                }
                            }

                            if (recapito.Comune != null)
                                testata.Provincia = recapito.Comune.ProvinciaAppartenenza.Codice;

                            // ----------------------------------------------
                            //  Dettaglio Rate
                            // ----------------------------------------------
                            decimal importoTotaleDaVersare = 0;

                            // Rate con versamenti
                            foreach (var rata in rateScadute)
                            {
                                try
                                {
                                    var dettaglio = new DettaglioSollecitoDTO
                                    {
                                        Id = rata.ID,
                                        DataScadenza = rata.DataScadenza,
                                        IdTestataSollecito = testata.Id,
                                        ProgressivoRata = rata.PianoRatealeDettaglio?.Progressivo ?? rata.Progressivo,
                                        Importo = rata.Importo,
                                        ImportoPagato = rata.GetImportoVersato(dataVersamenti),
                                        CodiceRata = rata.ID,
                                        IdEsercizio = rata.Esercizio.ID,
                                        IdSoggetto = rata.Soggetto.ID,
                                        DescrizioneSoggetto = rata.Soggetto.DisplayName,
                                        DescrizioneEsercizio = rata.Esercizio.DisplayName
                                    };

                                    if (groupByPersone)
                                    {
                                        dettaglio.IdUnitaImmobiliare = rata.Soggetto.UnitaImmobiliare.ID;
                                        dettaglio.Interno = rata.Soggetto.UnitaImmobiliare.InternoCompleto;
                                        dettaglio.Piano = rata.Soggetto.UnitaImmobiliare.Piano;
                                        dettaglio.Ordine = rata.Soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault();
                                        dettaglio.DescrizioneUnitaImmobiliare = rata.Soggetto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione + " - " + rata.Soggetto.UnitaImmobiliare.Descrizione;
                                        dettaglio.Subalterno = rata.Soggetto.UnitaImmobiliare.Subalterno;
                                    }

                                    if (soggetto?.PercentualeRiferimento != null)
                                        dettaglio.PercentualePossesso = Convert.ToInt32(soggetto.PercentualeRiferimento.Value);
                                    dettaglio.ImportoDaVersare = dettaglio.Importo - dettaglio.ImportoPagato;

                                    if (rata.Versamenti.Count > 0)
                                        dettaglio.DataUltimoPagamento = IesiGenericCollections<VersamentiRate>.GetByIndex(rata.Versamenti, rata.Versamenti.Count - 1).Versamento.Data;

                                    testata.Dettagli.Add(dettaglio);
                                    importoTotaleDaVersare += dettaglio.ImportoDaVersare;
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore inaspettato nel calcolo del sollecito per soggetto - DETTAGLIO RATE CON VERSAMENTI - {0} - soggetto:{1} - rata:{2}", ex, Utility.GetMethodDescription(), id, rata.ID);
                                    throw;
                                }
                            }

                            // Versamenti senza rate associate
                            // TODO: elaborare versamenti rate e versamentisoggetto per ottenere una lista dei versamenti fuori piano rateale
                            foreach (var versamento in altriVersamenti)
                            {
                                try
                                {
                                    var versamento1 = versamento;
                                    var importoPagato = versamento.Importo - altriVersamentiRate.Where(item => item.Versamento.ID == versamento1.ID).Sum(item => item.Importo);
                                    if (importoPagato > 0)
                                    {
                                        var dettaglio = new DettaglioSollecitoDTO
                                        {
                                            DataScadenza = DateTime.MaxValue,
                                            DataUltimoPagamento = versamento.Data,
                                            IdTestataSollecito = testata.Id,
                                            ImportoPagato = importoPagato,
                                            IdEsercizio = versamento.Esercizio.ID,
                                            IdSoggetto = versamento.Soggetto.ID,
                                            DescrizioneSoggetto = versamento.Soggetto.DisplayName,
                                            DescrizioneEsercizio = versamento.Esercizio.DisplayName,
                                            ImportoDaVersare = importoPagato * -1
                                        };

                                        if (groupByPersone)
                                        {
                                            dettaglio.IdUnitaImmobiliare = versamento.Soggetto.UnitaImmobiliare.ID;
                                            dettaglio.Interno = versamento.Soggetto.UnitaImmobiliare.InternoCompleto;
                                            dettaglio.Piano = versamento.Soggetto.UnitaImmobiliare.Piano;
                                            dettaglio.Ordine = versamento.Soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault();
                                            dettaglio.DescrizioneUnitaImmobiliare = versamento.Soggetto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione + " - " + versamento.Soggetto.UnitaImmobiliare.Descrizione;
                                            dettaglio.Subalterno = versamento.Soggetto.UnitaImmobiliare.Subalterno;
                                        }

                                        if (soggetto?.PercentualeRiferimento != null)
                                            dettaglio.PercentualePossesso = Convert.ToInt32(soggetto.PercentualeRiferimento.Value);

                                        testata.Dettagli.Add(dettaglio);
                                        importoTotaleDaVersare -= dettaglio.ImportoPagato;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore inaspettato nel calcolo del sollecito per soggetto - VERSAMENTO SENZA RATE ASSOCIATE - {0} - Id:{1} - versamento:{2}", ex, Utility.GetMethodDescription(), id, versamento.ID);
                                    throw;
                                }
                            }

                            testata.ImportoTotaleDaVersare = importoTotaleDaVersare;
                            testata.TipoIndirizzo = kvp.Value;
                            solleciti.Add(testata);
                            
                            // ================================================================================
                            //  Se richiesto aggiungo per i proprietari le rate di conduzione
                            // ================================================================================
                            if (sollecitaProprietarioConduzione)
                            {
                                if (soggetto != null)
                                {
                                    var conduttori = soggetto.UnitaImmobiliare.Conduttori;
                                    if (conduttori.Count > 0)
                                    {
                                        var idConduttori = new List<int>(conduttori.Count);
                                        idConduttori.AddRange(conduttori.Select(soggettoCondominio => soggettoCondominio.ID));
                                        var rateConduttori = _rateService.GetRataByEsercizioSoggetti(idEsercizio, idConduttori, dataRate, false);
                                        var versamentiConduttori = _versamentiService.GetVersamentiByEsercizioSoggetti(idEsercizio, idConduttori);

                                        var importoCompetenzaConduzione = rateConduttori.Sum(item => item.Importo.GetValueOrDefault());
                                        var importoVersatoConduzione = versamentiConduttori.Sum(item => item.Importo);
                                        testata.ImportoCompetenza += importoCompetenzaConduzione;
                                        testata.ImportoTotaleDaVersare += (importoCompetenzaConduzione - importoVersatoConduzione);

                                        // Dettaglio rate
                                        IList<VersamentoSoggetto> versamentiElaborati = new List<VersamentoSoggetto>();
                                        foreach (var rataSoggettoDTO in rateConduttori)
                                        {
                                            var dettaglio = new DettaglioSollecitoDTO
                                            {
                                                Id = rataSoggettoDTO.ID,
                                                DataScadenza = rataSoggettoDTO.DataScadenza,
                                                IdTestataSollecito = testata.Id,
                                                ProgressivoRata = rataSoggettoDTO.Progressivo,
                                                Importo = rataSoggettoDTO.Importo.GetValueOrDefault(),
                                                ImportoPagato = rataSoggettoDTO.ImportoPagato.GetValueOrDefault(),
                                                CodiceRata = rataSoggettoDTO.ID,
                                                IdEsercizio = rataSoggettoDTO.IdEsercizio,
                                                IdSoggetto = rataSoggettoDTO.IdSoggettoCondominio,
                                                DescrizioneSoggetto = rataSoggettoDTO.DescrizioneSoggettoCondominio,
                                                DescrizioneEsercizio = rataSoggettoDTO.DescrizioneEsercizio
                                            };

                                            if (groupByPersone)
                                            {
                                                dettaglio.IdUnitaImmobiliare = rataSoggettoDTO.IdUnitaImmobiliare;
                                                dettaglio.Ordine = rataSoggettoDTO.OrdineUnitaImmobiliare;
                                                dettaglio.DescrizioneUnitaImmobiliare = rataSoggettoDTO.DescrizioneUnitaImmobiliare;
                                                dettaglio.Subalterno = rataSoggettoDTO.Subalterno;
                                            }

                                            if (soggetto?.PercentualeRiferimento != null)
                                                dettaglio.PercentualePossesso = Convert.ToInt32(soggetto.PercentualeRiferimento.Value);
                                            dettaglio.ImportoDaVersare = dettaglio.Importo - dettaglio.ImportoPagato;

                                            var rata = _daoFactory.GetRataSoggettoDao().Find(rataSoggettoDTO.ID, false);
                                            if (rata != null && rata.Versamenti.Count > 0)
                                            {
                                                foreach (var rateVersamenti in rata.Versamenti)
                                                    versamentiElaborati.Add(rateVersamenti.Versamento);

                                                dettaglio.DataUltimoPagamento = IesiGenericCollections<VersamentiRate>.GetByIndex(rata.Versamenti, rata.Versamenti.Count - 1).Versamento.Data;
                                            }

                                            testata.Dettagli.Add(dettaglio);
                                        }
                                        
                                        // Versamenti fuori piano rateale
                                        foreach (var versamentoSoggetto in versamentiConduttori)
                                        {
                                            if (!versamentiElaborati.Contains(versamentoSoggetto) && versamentoSoggetto.Importo > 0)
                                            {
                                                var dettaglioVersamento = new DettaglioSollecitoDTO
                                                {
                                                    DataScadenza = DateTime.MaxValue,
                                                    DataUltimoPagamento = versamentoSoggetto.Data,
                                                    IdTestataSollecito = testata.Id,
                                                    ImportoPagato = versamentoSoggetto.Importo,
                                                    IdEsercizio = versamentoSoggetto.Esercizio.ID,
                                                    IdSoggetto = versamentoSoggetto.Soggetto.ID,
                                                    DescrizioneSoggetto = versamentoSoggetto.Soggetto.DisplayName,
                                                    DescrizioneEsercizio = versamentoSoggetto.Esercizio.DisplayName,
                                                    ImportoDaVersare = versamentoSoggetto.Importo * -1
                                                };

                                                if (groupByPersone)
                                                {
                                                    dettaglioVersamento.IdUnitaImmobiliare = versamentoSoggetto.Soggetto.UnitaImmobiliare.ID;
                                                    dettaglioVersamento.Interno = versamentoSoggetto.Soggetto.UnitaImmobiliare.InternoCompleto;
                                                    dettaglioVersamento.Piano = versamentoSoggetto.Soggetto.UnitaImmobiliare.Piano;
                                                    dettaglioVersamento.Ordine = versamentoSoggetto.Soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault();
                                                    dettaglioVersamento.DescrizioneUnitaImmobiliare = versamentoSoggetto.Soggetto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione + " - " + versamentoSoggetto.Soggetto.UnitaImmobiliare.Descrizione;
                                                    dettaglioVersamento.Subalterno = versamentoSoggetto.Soggetto.UnitaImmobiliare.Subalterno;
                                                }

                                                testata.Dettagli.Add(dettaglioVersamento);
                                            }
                                        }
                                    }

                                }
                            }

                            // ================================================================
                            // Creo gli oggetti sollecito se richiesto
                            // ================================================================
                            if (storico)
                            {
                                var esercizioSollecito = (esercizio ?? _daoFactory.GetEsercizioDao().GetEsercizioCompetenza(condominio, DateTime.Today)) ?? _esercizioService.GetUltimoEsercizioOrdinario(condominio.ID);
                                if (esercizioSollecito != null)
                                {
                                    Sollecito sollecito;

                                    var testoLettera = testoModelloLettera;
                                    if (string.IsNullOrEmpty(testoLettera))
                                        testoLettera = modello.Testo;
                                    if (!string.IsNullOrEmpty(testoLettera))
                                        testoLettera = testoLettera.Trim();
                                    if (soggetto != null)
                                    {
                                        sollecito = new Sollecito(esercizioSollecito, soggetto, dataSollecito, dataRate.GetValueOrDefault(), importoLimite.GetValueOrDefault(), testata.ImportoTotaleDaVersare, bancaSollecito, modello.Oggetto, testoLettera)
                                        {
                                            ImportoCompetenza = importoCompetenza,
                                            TipoIndirizzo = kvp.Value,
                                            StampaProprietario = stampaProprietario,
                                            GroupByPersona = groupByPersone
                                        };
                                    }
                                    else
                                    {
                                        sollecito = new Sollecito(esercizioSollecito, persona, dataSollecito, dataRate.GetValueOrDefault(), importoLimite.GetValueOrDefault(), testata.ImportoTotaleDaVersare, bancaSollecito, modello.Oggetto, testoLettera)
                                        {
                                            ImportoCompetenza = importoCompetenza,
                                            TipoIndirizzo = kvp.Value,
                                            StampaProprietario = stampaProprietario,
                                            GroupByPersona = groupByPersone
                                        };
                                    }

                                    foreach (var dett in testata.Dettagli)
                                    {
                                        var dettaglio = new DettaglioSollecito(sollecito, dett.Importo, dett.ImportoDaVersare, dett.ImportoPagato)
                                        {
                                            DataUltimoPagamento = dett.DataUltimoPagamento
                                        };

                                        if (dett.DataScadenza != DateTime.MaxValue)
                                            dettaglio.DataScadenzaRata = dett.DataScadenza;

                                        if (dett.CodiceRata != null)
                                            dettaglio.Rata = rateSoggetti.FirstOrDefault(item => item.ID == dett.CodiceRata) ?? _daoFactory.GetRataSoggettoDao().GetById(dett.CodiceRata.Value, false);
                                    }
                                    listaSolleciti.Add(sollecito);
                                    _daoFactory.GetSollecitoDao().SaveOrUpdate(sollecito);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato nel calcolo del sollecito per soggetto - {0} - esercizio:{1} - soggetto:{2}", ex, Utility.GetMethodDescription(), idEsercizio, id);
                        throw;
                    }
                }

                // ================================================================================================================
                // Rimuovo eventuali dettagli con importo a 0
                // ================================================================================================================
                foreach (var testataSollecitoDTO in solleciti)
                {
                    var dettagliDaRimuovere = testataSollecitoDTO.Dettagli.Where(dettaglioSollecitoDTO => dettaglioSollecitoDTO.Importo == 0 && dettaglioSollecitoDTO.ImportoDaVersare == 0 && dettaglioSollecitoDTO.ImportoPagato == 0).ToList();

                    foreach (var dettaglioSollecitoDTO in dettagliDaRimuovere)
                        testataSollecitoDTO.Dettagli.Remove(dettaglioSollecitoDTO);
                }

                // ================================================================================================================
                // Creo i movimenti di addebito - una testata per ogni Esercizio (possibile solo se è stato richiesto lo STORICO)
                // ================================================================================================================
                try
                {
                    if (importoCompetenza > 0)
                    {
                        var sollecitiPerEsercizio = listaSolleciti.GroupBy(item => item.Esercizio);

                        foreach (var sollecitiEsercizio in sollecitiPerEsercizio)
                        {
                            var esercizioAddebito = sollecitiEsercizio.Key;
                            Conto contoAddebito = null;
                            SottoConto sottoContoAddebito = null;
                            if (idConto != null)
                            {
                                contoAddebito = _daoFactory.GetContoDao().Find(idConto.Value, false);
                                if (idSottoConto != null)
                                    sottoContoAddebito = _daoFactory.GetSottoContoDao().GetById(idSottoConto.Value, false);
                            }
                            if (contoAddebito == null)
                            {
                                sottoContoAddebito = _daoFactory.GetSottoContoDao().GetAddebitoCompetenzeByEsercizio(esercizioAddebito.ID, esercizioAddebito.CondominioRiferimento.ID);
                                if (sottoContoAddebito != null)
                                    contoAddebito = sottoContoAddebito.ContoRiferimento;
                            }

                            if (contoAddebito != null && esercizioAddebito != null)
                            {
                                var testata = _movimentiContabileService.SetMovimentiSollecito(esercizioAddebito, sollecitiEsercizio.ToList(), dataRegistrazioneContabile.GetValueOrDefault(), contoAddebito, sottoContoAddebito);

                                // -------------------------------------------
                                // Genero il protocollo di archiviazione
                                // -------------------------------------------
                                var progressivo = _protocolloService.GetProgressivo(TipoProtocollo.Fattura, testata.EsercizioRiferimento.DataApertura.GetValueOrDefault().Year, testata.EsercizioRiferimento.CondominioRiferimento);
                                if (progressivo.Progressivo != null)
                                {
                                    testata.NumeroProtocollo = progressivo.Progressivo.Value;
                                    testata.AnnoArchiviazioneOttica = testata.EsercizioRiferimento.DataApertura.GetValueOrDefault().Year;
                                }
                                else
                                {
                                    _log.ErrorFormat("Errore imprevisto nella generazione del protocollo di archiviazione - {0} - esercizio:{1} - testata:{2} - message:{3}", Utility.GetMethodDescription(), esercizioAddebito.ID, testata.ID, progressivo.Message);
                                }

                            }

                        }
                    }
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore inaspettato nel calcolo del sollecito per soggetto - CREAZIONE MOVIMENTI CONTABILI - {0} - esercizio:{1}", ex, Utility.GetMethodDescription(), idEsercizio);
                    throw;
                }

                return solleciti;

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nel calcolo del sollecito per soggetto - CREAZIONE MOVIMENTI CONTABILI - {0} - esercizio:{1} - groupByPersone:{2} - dataRate:{3} - dataVersamenti:{4} - importoLimite:{5} - importoCompetenza:{6} - dataSollecito:{7} - stampaProprietario:{8} - idBanca:{9} - idModelloLettera:{10} - dataRegistrazioneContabile:{11} - idConto:{12} - idSottoConto:{13} - storico:{14} - esercizio:{15}", ex, Utility.GetMethodDescription(), idEsercizio.GetValueOrDefault(), groupByPersone, dataRate, dataVersamenti, importoLimite, importoCompetenza, dataSollecito, stampaProprietario, idBanca, idModelloLettera, dataRegistrazioneContabile, idConto, idSottoConto, storico, idEsercizio);
                throw;
            }

        }
Example #26
0
        public System.Data.DataTable ListForPaymentDataTable(Int64 ContactID, string SortField = "TransactionNo", System.Data.SqlClient.SortOrder SortOrder = System.Data.SqlClient.SortOrder.Ascending, Int32 limit = 0, DateTime? TransactionDateFrom = null, DateTime? TransactionDateTo = null, bool boShowConsignment = true, bool boShowAROnly = true)
		{
			try
            {
                MySqlCommand cmd = new MySqlCommand();
                cmd.CommandType = System.Data.CommandType.Text;

				string SQL = "SELECT " +
									   "a.TerminalNo, " +
                                       "a.BranchID, " +
                                       "b.CreditPaymentID, " +
                                       "a.TransactionID, " +
									   "a.TransactionNo, " +
									   "a.PaxNo, " +
                                       "a.ModeOfTerms, a.Terms, " +
                                       "CASE ModeOfTerms " +
                                       "    WHEN 0 THEN 'Days' " +
                                       "    WHEN 1 THEN 'Months' " +
                                       "    WHEN 2 THEN 'Years' " +
                                       "END ModeOfTermsCode, " +
                                       "CASE ModeOfTerms " +
                                       "    WHEN 0 THEN DATE_ADD(a.TransactionDate, INTERVAL a.Terms DAY) " +
                                       "    WHEN 1 THEN DATE_ADD(a.TransactionDate, INTERVAL a.Terms MONTH) " +
                                       "    WHEN 2 THEN DATE_ADD(a.TransactionDate, INTERVAL a.Terms YEAR) " +
                                       "END AgingDate, " +
                                       "CASE ModeOfTerms " +
                                       "    WHEN 0 THEN CONCAT(DATEDIFF(NOW(), a.TransactionDate), 'Days') " +
                                       "    WHEN 1 THEN CONCAT(DATEDIFF(NOW(), a.TransactionDate)/30, 'Months') " +
                                       "    WHEN 2 THEN CONCAT(DATEDIFF(NOW(), a.TransactionDate)/365, 'Years') " +
                                       "END AgeTerms, " +
                                       "a.CustomerID, " +
									   "a.CustomerName, " +
									   "a.TransactionDate, " +
                                       "a.GrossSales, " +
                                       "a.SubTotal + a.CreditChargeAmount AS SubTotal, " +
                                       "a.NetSales, " +
									   "a.ItemsDiscount, " +
                                       "a.SNRItemsDiscount, " +
                                       "a.PWDItemsDiscount, " +
                                       "a.OtherItemsDiscount, " +
									   "a.Discount, " +
                                       "a.SNRDiscount, " +
                                       "a.PWDDiscount, " +
                                       "a.OtherDiscount, " +
									   "a.AmountPaid - b.Amount 'AmountPaid', " +
									   "b.Amount 'Credit', " +
									   "b.AmountPaid 'CreditPaid', " +
									   "b.Amount - b.AmountPaid 'Balance', " +
                                       "b.CreditReason, b.CreditReasonID " +
								   "FROM  tblTransactions a " +
								   "INNER JOIN tblCreditPayment b ON a.BranchID = b.BranchID AND a.TerminalNo = b.TerminalNo AND a.TransactionNo = b.TransactionNo " +
                                   "WHERE b.Amount - b.AmountPaid <> 0 AND a.CustomerID = @ContactID " +
								       "AND b.ContactID = @ContactID " +
								       "AND b.Amount <> b.AmountPaid ";

                if (TransactionDateFrom.GetValueOrDefault() != DateTime.MinValue)
                {
                    SQL += "AND a.TransactionDate >= @TransactionDateFrom ";
                    cmd.Parameters.AddWithValue("@TransactionDateFrom", TransactionDateFrom.GetValueOrDefault() == DateTime.MinValue ? Constants.C_DATE_MIN_VALUE : TransactionDateFrom);
                }
                if (TransactionDateTo.GetValueOrDefault() != DateTime.MinValue)
                {
                    SQL += "AND a.TransactionDate <= @TransactionDateTo ";
                    cmd.Parameters.AddWithValue("@TransactionDateTo", TransactionDateTo.GetValueOrDefault() == DateTime.MinValue ? Constants.C_DATE_MIN_VALUE : TransactionDateTo);
                }
                if (!boShowConsignment)
                {
                    SQL += "AND a.isConsignment = @ShowConsignment ";
                    cmd.Parameters.AddWithValue("@ShowConsignment", false);
                }
                if (!boShowAROnly)
                {
                    SQL += "AND a.isConsignment = @boShowAR ";
                    cmd.Parameters.AddWithValue("@boShowAR", true);
                }

				// Added Jan 18, 2009
				// ORDER BY TransactionNo ASC
				// SO that FIFO during payment will be applied
				// FIFO - first in first out
                SQL = "SELECT TerminalNo, BranchID, CreditPaymentID, TransactionID, " +
							"TransactionNo, " +
							"PaxNo, " +
							"CustomerID, " +
							"CustomerName, " +
							"TransactionDate, " +
                            "CreditReason, CreditReasonID, " +
                            "ModeOfTerms, Terms, ModeOfTermsCode, " +
                            "AgingDate, AgeTerms, " +
							"GrossSales, " +
                            "SubTotal, " +
                            "NetSales, " +
							"ItemsDiscount, " +
                            "SNRItemsDiscount, " +
                            "PWDItemsDiscount, " +
                            "OtherItemsDiscount, " +
							"Discount, " +
                            "SNRDiscount, " +
                            "PWDDiscount, " +
                            "OtherDiscount, " +
							"AmountPaid, " +
							"Credit, " +
							"CreditPaid, " +
							"Balance " +
						"FROM (" + SQL + ") AS tblCreditPayment ";

                SQL += "ORDER BY " + (!string.IsNullOrEmpty(SortField) ? SortField : "TransactionNo") + " ";
                SQL += SortOrder == System.Data.SqlClient.SortOrder.Ascending ? "ASC " : "DESC ";
                SQL += limit == 0 ? "" : "LIMIT " + limit.ToString() + " ";

                cmd.Parameters.AddWithValue("@ContactID", ContactID);

                cmd.CommandText = SQL;
                string strDataTableName = "tbl" + this.GetType().FullName.Split(new Char[] { '.' })[this.GetType().FullName.Split(new Char[] { '.' }).Length - 1]; System.Data.DataTable dt = new System.Data.DataTable(strDataTableName);
                base.MySqlDataAdapterFill(cmd, dt);

				return dt;
            }
			catch (Exception ex)
			{
				throw base.ThrowException(ex);
			}
		}
        public AuthorizationMessages EvadiMovimento(string descrizione, IList<MovimentoContabile> movimentiContabili, IList<int> idMovimentiBancari, DateTime? dataRegistrazione, LogTransazione logTransazione)
        {
            var fatalMessage = string.Empty;
            var warnMessage = string.Empty;

            try
            {
                MovimentoBancario movimentoBancarioSingolo = null;
                var aggiornaDataRegistrazione = true;

                if (idMovimentiBancari.Count == 1)
                {
                    movimentoBancarioSingolo = _daoFactory.GetMovimentoBancarioDao().GetById(idMovimentiBancari[0], false);
                    if (dataRegistrazione == null)
                        dataRegistrazione = movimentoBancarioSingolo.DataContabile;

                    // =================================================================
                    // Controllo data registrazione
                    // =================================================================
                    foreach (var movimentoContabile in movimentiContabili)
                    {
                        try
                        {
                            if (movimentoContabile != null)
                            {
                                var message = IsAllowDataRegistrazione(new List<int> { movimentoContabile.Testata.EsercizioRiferimento.CondominioRiferimento.ID }, movimentoContabile.Testata.EsercizioRiferimento, dataRegistrazione.GetValueOrDefault());
                                if (message.Count > 0)
                                {
                                    aggiornaDataRegistrazione = false;
                                    _log.DebugFormat("Data di registrazione non valida - {0} - data:{1} - movimentoContabile:{2} - movimentoBancario:{3} - esercizio:{4}", Utility.GetMethodDescription(), movimentoBancarioSingolo.DataContabile.GetValueOrDefault(), movimentoContabile.ID, movimentoBancarioSingolo.ID, movimentoContabile.Testata.EsercizioRiferimento.ID);
                                    warnMessage += string.Format("La data di registrazione del movimento contabile non è stata aggiornata con la data del movimento bancario perchè la data {0:d} non è valida per l'esercizio {1}{2}", movimentoBancarioSingolo.DataContabile.GetValueOrDefault(), movimentoContabile.Testata.EsercizioRiferimento.DisplayName, Environment.NewLine);
                                    //warnMessage = message.Aggregate(fatalMessage, (current, mess) => current + (mess + Environment.NewLine));
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore inaspettato durante il controllo della data di registrazione - {0} - descrizione:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), descrizione, movimentoContabile.ID);
                            fatalMessage = "Errore inaspettato durante la conferma del movimento contabile.";
                        }
                    }

                    if (!string.IsNullOrEmpty(fatalMessage))
                        return new AuthorizationMessages(fatalMessage, warnMessage);
                }

                // =================================================================
                // Nuovo oggetto Evasione Bancaria
                // =================================================================
                var evasione = new EvasioneBancaria(descrizione, logTransazione);
                if (logTransazione == null)
                    _daoFactory.GetEvasioneBancariaDao().SaveOrUpdate(evasione);

                // =================================================================
                // Evasione di tutti i movimenti contabili
                // =================================================================
                foreach (var movimentoContabile in movimentiContabili)
                {
                    try
                    {
                        if (movimentoContabile != null)
                        {
                            movimentoContabile.EvasioneBancaria = evasione;
                            if (movimentoBancarioSingolo != null)
                            {
                                if (aggiornaDataRegistrazione)
                                {
                                    movimentoContabile.Testata.DataRegistrazione = dataRegistrazione;    

                                    if (movimentoContabile.ID > 0)
                                    {
                                        // Se è associato un pagamento al movimento aggiorno la data di pagamento
                                        var pagamento = _daoFactory.GetPagamentoDao().GetByMovimentoContabile(movimentoContabile);
                                        if (pagamento != null)
                                            pagamento.Data = movimentoContabile.Testata.DataRegistrazione;

                                        // Se è associato un versamento condomino al movimento aggiorno la data di versamento
                                        var versamento = _daoFactory.GetVersamentoSoggettoDao().GetByMovimentoContabile(movimentoContabile);
                                        if (versamento != null)
                                            versamento.Data = movimentoContabile.Testata.DataRegistrazione.GetValueOrDefault();
                                    }
                                }
                            }

                            movimentoContabile.Stato = StatoMovimentoContabileEnum.Evaso;
                            if (movimentoContabile.ID > 0)
                            {

                                var pag = _daoFactory.GetPagamentoDao().GetByMovimentoContabile(movimentoContabile);
                                if (pag != null)
                                {
                                    if (pag.TipoCodiceConfermaBonifico == TipoCodiceEsitoDisposizioneBonifico.Undefined)
                                        pag.TipoCodiceConfermaBonifico =
                                            TipoCodiceEsitoDisposizioneBonifico.MovimentoBancario;
                                    pag.Stato = StatoSpesaEnum.Evasa;
                                }
                            }
                        }
                        else
                        {
                            _log.ErrorFormat("Errore inaspettato durante la conferma del movimento contabile. Non è stato trovato il movimento - {0} - descrizione:{1} - movimento:{2}", Utility.GetMethodDescription(), descrizione, movimentoContabile.ID);
                            fatalMessage = "Non è stato trovato il movimento contabile con id: " + movimentoContabile.ID + "." + Environment.NewLine + "Probabilmente è stato eliminato dall'utente in un'altra maschera.";
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato durante la conferma del movimento contabile - SINGOLO MOVIMENTO CONTABILE - {0} - descrizione:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), descrizione, movimentoContabile.ID);
                        fatalMessage = "Errore inaspettato durante la conferma del movimento contabile.";
                    }
                }

                // =================================================================
                // Evasione di tutti i movimenti bancari
                // =================================================================
                foreach (var idMovimento in idMovimentiBancari)
                {
                    try
                    {
                        var movimentoBancario = _daoFactory.GetMovimentoBancarioDao().Find(idMovimento, false);
                        if (movimentoBancario != null)
                        {
                            movimentoBancario.EvasioneBancaria = evasione;
                            movimentoBancario.Stato = StatoMovimentoBancarioEnum.Contabilizzato;
                        }
                        else
                        {
                            _log.ErrorFormat("Errore inaspettato durante la conferma del movimento bancario. Non è stato trovato il movimento - {0} - descrizione:{1} - movimento:{2}", Utility.GetMethodDescription(), descrizione, idMovimento);
                            fatalMessage = "Non è stato trovato il movimento bancario con id: " + idMovimento;
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato durante la conferma del movimento Bancario - SINGOLO MOVIMENTO BANCARIO - {0} - descrizione:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), descrizione, idMovimento);
                        fatalMessage = "Errore inaspettato durante la conferma del movimento contabile.";
                    }
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la conferma della evasione bancaria - {0} - descrizione:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), descrizione);
                fatalMessage = "Errore inaspettato durante la conferma della evasione bancaria.";
            }

            return new AuthorizationMessages(fatalMessage, warnMessage);
        }
        private List<MailMessageItem> GetFilteredChains(
            IDbManager db,
            int id_tenant,
            string id_user,
            MailFilter filter,
            DateTime? utc_chain_from_date,
            int from_message,
            bool? prev_flag,
            out bool has_more)
        {
            var res = new List<MailMessageItem>();
            var chains_to_skip = new List<ChainInfo>();
            var skip_flag = false;
            var chunck_index = 0;

            var sort_order = filter.SortOrder == "ascending";

            if (prev_flag.GetValueOrDefault(false))
                sort_order = !sort_order;

            var query_messages = new SqlQuery(MailTable.name)
                .Select(
                    MailTable.Columns.id,
                    MailTable.Columns.from,
                    MailTable.Columns.to,
                    MailTable.Columns.reply,
                    MailTable.Columns.subject,
                    MailTable.Columns.importance,
                    MailTable.Columns.date_sent,
                    MailTable.Columns.size,
                    MailTable.Columns.attach_count,
                    MailTable.Columns.unread,
                    MailTable.Columns.is_answered,
                    MailTable.Columns.is_forwarded,
                    MailTable.Columns.is_from_crm,
                    MailTable.Columns.is_from_tl,
                    MailTable.Columns.folder_restore,
                    MailTable.Columns.folder,
                    MailTable.Columns.chain_id,
                    MailTable.Columns.id_mailbox,
                    MailTable.Columns.chain_date)
                .Where(GetUserWhere(id_user, id_tenant))
                .Where(MailTable.Columns.is_removed, false)
                .ApplyFilter(filter)
                .OrderBy(MailTable.Columns.chain_date, sort_order);

            if (null != utc_chain_from_date)
            {
                query_messages = query_messages.Where(sort_order ?
                    Exp.Ge(MailTable.Columns.chain_date, utc_chain_from_date) :
                    Exp.Le(MailTable.Columns.chain_date, utc_chain_from_date));
                skip_flag = true;
            }

            // We are increasing the size of the page to check whether it is necessary to show the Next button.
            while (res.Count < filter.PageSize + 1)
            {
                query_messages.SetFirstResult(chunck_index * chunk_size * filter.PageSize).SetMaxResults(chunk_size * filter.PageSize);
                chunck_index++;

                var tenant_obj = CoreContext.TenantManager.GetTenant(id_tenant);
                var list = db
                    .ExecuteList(query_messages)
                    .ConvertAll(r =>
                        ConvertToConversation(r, tenant_obj));

                if (0 == list.Count)
                    break;

                foreach (var item in list)
                {
                    var chain_info = new ChainInfo {id = item.ChainId, mailbox = item.MailboxId};
                    
                    // Skip chains that was stored before and within from_message's chain.
                    if (skip_flag)
                    {
                        var tenant = CoreContext.TenantManager.GetTenant(id_tenant);
                        if (item.ChainDate != TenantUtil.DateTimeFromUtc(tenant, utc_chain_from_date.GetValueOrDefault()))
                            skip_flag = false;
                        else
                        {
                            if (item.Id == from_message)
                                skip_flag = false;
                            chains_to_skip.Add(chain_info);
                            continue;
                        }
                    }

                    if (chains_to_skip.Contains(chain_info))
                        continue;

                    var already_contains = false;
                    foreach(var chain in res){
                        if(chain.ChainId == item.ChainId && chain.MailboxId == item.MailboxId){
                            already_contains = true;
                            if(chain.Date < item.Date)
                                res[res.IndexOf(chain)] = item;
                            break;
                        }
                    }

                    if(!already_contains)
                        res.Add(item);

                    if (filter.PageSize + 1 == res.Count)
                        break;
                }

                var is_all_needed_conversation_gathered = filter.PageSize + 1 == res.Count;
                if (is_all_needed_conversation_gathered)
                    break;

                var is_enough_messages_for_page = chunk_size*filter.PageSize <= list.Count;
                if (!is_enough_messages_for_page)
                    break;
            }

            has_more = res.Count > filter.PageSize;

            if (has_more)
                res.RemoveAt(filter.PageSize);

            return res;
        }
Example #29
0
        /// <summary>
        /// 기간을 설정합니다.
        /// </summary>
        /// <param name="newStart">설정할 시작 시각</param>
        /// <param name="newEnd">설정할 완료 시각</param>
        public virtual void Setup(DateTime? newStart, DateTime? newEnd) {
            if(IsDebugEnabled)
                log.Debug("기간을 새로 설정합니다. newStart=[{0}], newEnd=[{1}]", newStart, newEnd);

            AssertMutable();

            TimeTool.AdjustPeriod(ref newStart, ref newEnd);

            _start = newStart.GetValueOrDefault(TimeSpec.MinPeriodTime);
            _end = newEnd.GetValueOrDefault(TimeSpec.MaxPeriodTime);
        }
Example #30
0
        public virtual List<Child> GetChildrenAt(DateTime? dt)
        {
            var ddt = dt.GetValueOrDefault(DateTime.Now);

            return
                _children.Where(
                    x => x.Est.BirthCert != null && ddt.ComparedTo(x.Est.BirthCert.DateOfBirth) == ChronoCompare.After).ToList();
        }