Exemplo n.º 1
0
        /// <summary>
        /// Send pay day notification.
        /// </summary>

        public void SendPayDayMessage()
        {
            var      dtTodayUtc      = DateTime.UtcNow;
            var      timeZoneCST     = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
            var      utcOffset       = new DateTimeOffset(dtTodayUtc, TimeSpan.Zero);
            DateTime cstTimeZoneTime = utcOffset.ToOffset(timeZoneCST.GetUtcOffset(utcOffset)).DateTime;

            var     nextPayDate      = cstTimeZoneTime.GetNextPayDay().Date.AddHours(15);
            decimal amountdeduction  = decimal.Zero;
            var     startDate        = nextPayDate.AddDays(-7);
            decimal memberPrevAmount = decimal.Zero;

            var completedChoresByFamily = _choreService.GetCompletedChoresByFamily(startDate, nextPayDate);

            foreach (var familyChores in completedChoresByFamily)
            {
                //Update Include flag for perticular family
                foreach (var choreDetail in familyChores)
                {
                    var includedChore = Repository.Table <Chore>().SingleOrDefault(p => p.Id.Equals(choreDetail.Id));
                    includedChore.IncludedFlag = true;
                    Repository.Update(includedChore);
                }

                var amountToBePaid = familyChores.Sum(m => m.Value);

                var childMembers = familyChores.Select(p => p.FamilyMember).Distinct().ToList();

                //Check for previous Week childs amount
                foreach (var child in childMembers)
                {
                    //memberPrevAmount = _earningServices.CalculateChildChoreStatusAmount(child.Id);
                    if (memberPrevAmount != decimal.Zero)
                    {
                        amountToBePaid = amountToBePaid - memberPrevAmount;
                    }
                }



                var childCount = Repository.Table <FamilyMember>().Count(m => m.User.FamilyID == familyChores.Key && m.MemberType == MemberType.Child && !m.IsDeleted);
                if (childCount == 0)
                {
                    continue;
                }
                var admin1 = Repository.Table <FamilyMember>().FirstOrDefault(m => m.User.FamilyID == familyChores.Key);
                var admin  = Repository.Table <FamilyMember>().FirstOrDefault(m => m.User.FamilyID == familyChores.Key &&
                                                                              m.MemberType == MemberType.Admin &&
                                                                              m.User.Family.FamilySubscription.Status == SubscriptionStatus.Active);

                if (admin == null)
                {
                    continue;
                }

                ////Check Financial Account Verification
                var hasFinancialAccount = Repository.Table <FinancialAccount>().Where(p => p.FamilyMemberID == admin.Id).FirstOrDefault().Status;
                if (hasFinancialAccount != FinancialAccountStatus.Verified)
                {
                    continue;
                }

                //Check The amount less than $1
                if (amountToBePaid < 1)
                {
                    var lessAmountMessage = "Your family total for the week is less than $1.00. BusyKid cannot process transactions less than $1.00.";
                    _smsApprovalHistory.AddLessAmount(admin.Id, ApprovalType.ChorePayment, lessAmountMessage);

                    if (!string.IsNullOrEmpty(admin.PhoneNumber))
                    {
                        _textMessageService.Send(admin.PhoneNumber, lessAmountMessage);
                    }

                    continue;
                }

                if (admin.PayDayAutoApproval)
                {
                    foreach (var chore in familyChores)
                    {
                        chore.ChoreStatus = ChoreStatus.CompletedAndApproved;
                        Repository.Update(chore);
                    }
                    continue;
                }

                decimal totalAmountToBePaid = 0;
                var     meesagesum          = "Total";

                var childPaymentDetails = string.Empty;
                foreach (var child in childMembers)
                {
                    var amountToBePaidToChild = familyChores.Where(m => m.FamilyMemberID == child.Id).Sum(m => m.Value);
                    if (amountToBePaidToChild == 0)
                    {
                        continue;
                    }
                    var separator = "\n";

                    //amountdeduction = _earningServices.CalculateChildChoreStatusAmount(child.Id);
                    amountToBePaidToChild = amountToBePaidToChild - amountdeduction;
                    if (amountToBePaidToChild <= 0)
                    {
                        continue;
                    }

                    totalAmountToBePaid  = totalAmountToBePaid + amountToBePaidToChild;
                    childPaymentDetails += $"{ child.Firstname }: ${amountToBePaidToChild:N2}{separator}";
                }
                childPaymentDetails += $"{ meesagesum }: ${totalAmountToBePaid:N2}";

                var message = $"Tomorrow is payday! Here is a summary of earnings: \n{childPaymentDetails}"
                              + " \n\nReply YES or NO.\nRespond within 2 hours to ensure Friday payday.";

                _smsApprovalHistory.Add(admin.Id, ApprovalType.ChorePayment, message);

                if (!string.IsNullOrEmpty(admin.PhoneNumber))
                {
                    _textMessageService.Send(admin.PhoneNumber, message);
                }

                //SendMessagePaydayNotProceedService(startDate, nextPayDate, admin.Id);
            }
        }