Exemplo n.º 1
0
        public void DailyTime_AddNewDailyTime()
        {
            using (var db = new AppDbContext(Utilities.TestDbContextOptions()))
            {
                // Arrange
                var timeFrom = new DateTime(2021, 12, 31, 8, 0, 0);
                var timeTo   = new DateTime(2021, 12, 31, 16, 0, 0);

                var dailyRepo          = new EfCoreDailyRepo(db);
                var dailyTimeViewModel = new DailyTimeViewModel();
                var dailyTime          = new DailyTime()
                {
                    Id        = Guid.NewGuid(),
                    Person    = "master",
                    Date      = "2021-12-31",
                    Job       = "Testing",
                    From      = timeFrom.ToString(CultureInfo.InvariantCulture),
                    To        = timeTo.ToString(CultureInfo.InvariantCulture),
                    CreatedAt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.CurrentCulture),
                    UpdatedAt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.CurrentCulture),
                    WorkTime  = dailyTimeViewModel.CalculateWorkTime(timeFrom.TimeOfDay, timeTo.TimeOfDay).ToString(CultureInfo.InvariantCulture) + "h"
                };

                // Act
                dailyRepo.Add(dailyTime);

                // Assert
                Assert.AreEqual((timeTo.TimeOfDay.Hours - timeFrom.TimeOfDay.Hours) + "h", dailyRepo.Get(dailyTime.Id).Result.WorkTime);
                Assert.AreEqual(timeFrom.ToString(CultureInfo.InvariantCulture), dailyRepo.Get(dailyTime.Id).Result.From);
            }
        }
Exemplo n.º 2
0
        public decimal CalculateInvoiceSum(int userId, decimal hours)
        {
            var sum            = 0M;
            var nonBilledHours = hours;

            var dailyTime = DailyTime.Where(t => t.UserId == userId)
                            .Where(t => t.TotalHours - t.BilledHours > 0)
                            .OrderBy(t => t.Date);

            foreach (var time in dailyTime)
            {
                var billingHours = Math.Min(nonBilledHours, time.TotalHours - time.BilledHours);

                sum += billingHours * time.HourlyRate;

                nonBilledHours -= billingHours;

                if (nonBilledHours == 0)
                {
                    break;
                }
            }

            return(sum);
        }
Exemplo n.º 3
0
        public void On(TimeTrackedEvent e)
        {
            var date = Date(e.At);

            if (e.Hours == 0)
            {
                DailyTime.RemoveAll(t => t.Date == date && t.UserId == e.UserId);
            }
            else
            {
                var dailyTime = DailyTime.SingleOrDefault(t => t.Date == date && t.UserId == e.UserId);

                if (dailyTime == null)
                {
                    dailyTime = new DailyTime
                    {
                        Date       = date,
                        HourlyRate = e.HourlyRate,
                        ProjectId  = e.ProjectId,
                        UserId     = e.UserId
                    };
                    DailyTime.Add(dailyTime);
                }

                dailyTime.TotalHours = e.Hours;
            }

            UpdateUserBilling(e.UserId);
        }
Exemplo n.º 4
0
        public void DailyTime_Ctor()
        {
            var daily_time = new DailyTime(12, 2, 3);

            Assert.Equal(12, daily_time.Hour);
            Assert.Equal(2, daily_time.Minute);
            Assert.Equal(3, daily_time.Second);
        }
Exemplo n.º 5
0
        public void DailyTime_TimespanCtor()
        {
            var daily_time = new DailyTime(new TimeSpan(12, 1, 2));

            Assert.Equal(12, daily_time.Hour);
            Assert.Equal(1, daily_time.Minute);
            Assert.Equal(2, daily_time.Second);
        }
Exemplo n.º 6
0
        public void DailyTime_Equals()
        {
            var foo    = new DailyTime(12, 12, 12);
            var foobar = new DailyTime(12, 12, 12);
            var bar    = new DailyTime(12, 5, 5);

            Assert.True(foo.Equals(foobar));
            Assert.False(foo.Equals(bar));
        }
Exemplo n.º 7
0
        public void DailyTime_AsTuple()
        {
            var daily_time = new DailyTime(12, 2, 3);
            var tuple      = daily_time.AsTuple();

            Assert.Equal(daily_time.Hour, tuple.Item1);
            Assert.Equal(daily_time.Minute, tuple.Item2);
            Assert.Equal(daily_time.Second, tuple.Item3);
        }
Exemplo n.º 8
0
        public void DailyTime_CompareTo()
        {
            var zoo = new DailyTime(0, 0, 0);
            var foo = new DailyTime(1, 1, 1);
            var moo = new DailyTime(1, 1, 1);
            var bar = new DailyTime(2, 2, 2);

            Assert.True(foo.CompareTo(bar) == -1);
            Assert.True(foo.CompareTo(moo) == 0);
            Assert.True(foo.CompareTo(zoo) == 1);
        }
Exemplo n.º 9
0
        public void DailyTime_HashCode()
        {
            var foo    = new DailyTime(12, 12, 12);
            var foobar = new DailyTime(12, 12, 12);
            var bar    = new DailyTime(5, 5, 5);

            var set = new HashSet <DailyTime>();

            set.Add(foo);
            Assert.True(set.Contains(foobar));
            Assert.False(set.Contains(bar));
        }
Exemplo n.º 10
0
        public void DailyTime_InvalidCtor()
        {
            var did_throw = false;

            try
            {
                var daily_time = new DailyTime(64, 2, 3);
            }
            catch (ArgumentOutOfRangeException)
            {
                did_throw = true;
            }

            Assert.True(did_throw);
        }
        public async Task <IActionResult> OnPostAsync(Guid Id, DailyTime time)
        {
            if (Id == null)
            {
                return(NotFound());
            }

            time = _context.DailyTimes.Find(Id);
            if (time != null)
            {
                _context.Remove(time);
                await _context.SaveChangesAsync();
            }
            SuccessDeleteMessage = "Dniówka została usunięta";
            return(RedirectToPage("/TimeManagement/Time/Dniowki"));
        }
Exemplo n.º 12
0
        public void DailyTime_CompareToInvalid()
        {
            var did_throw = false;
            var zoo       = new DailyTime(0, 0, 0);
            var boo       = new object();

            try
            {
                zoo.CompareTo(boo);
            }
            catch (ArgumentException)
            {
                did_throw = true;
            }
            Assert.True(did_throw);
        }
Exemplo n.º 13
0
        public AdminView()
        {
            InitializeComponent();
            DailyTime.Start();
            POS pos = new POS();

            pos.TopLevel = false;
            panelControl.Controls.Clear();
            panelControl.Controls.Add(pos);
            pos.BringToFront();
            pos.Show();

            sd.Shopname  = lblShopName.Text;
            sd.LicenseId = lblShopLicenseNum.Text;

            appSettings.GetAppSettings(sd);
            lblCashierId.Text = od.CashierId;
            repo.CashieId(od);
        }
Exemplo n.º 14
0
        public async Task <IActionResult> OnPost()
        {
            //DailyTimeModel.WorkTime = DailyTimeModel.To.Hours - DailyTimeModel.From.Hours;
            var userName = User.Identity.Name;
            var toAdd    = new DailyTime()
            {
                Id        = Guid.NewGuid(),
                Person    = userName,
                Date      = DailyTimeModel.Date.ToString(),
                Job       = DailyTimeModel.Job,
                From      = DailyTimeModel.From.ToString(),
                To        = DailyTimeModel.To.ToString(),
                CreatedAt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.CurrentCulture),
                UpdatedAt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.CurrentCulture),
                WorkTime  = DailyTimeModel.CalculateWorkTime(DailyTimeModel.From, DailyTimeModel.To).ToString() + "h"
            };

            await _dailyRepo.Add(toAdd);

            SuccessCreationMessage = "Dodano dni�wke!";
            return(RedirectToPage("/TimeManagement/Time/Dniowki"));
        }
Exemplo n.º 15
0
        /// <summary>
        ///     Recalculate billable hours for one user.
        /// </summary>
        private void UpdateUserBilling(int userId)
        {
            var result = new List <Billing>();

            var dailyTimeToBill = DailyTime.Where(t => t.UserId == userId).OrderBy(t => t.Date).ToArray();

            // reset hours info
            foreach (var time in dailyTimeToBill)
            {
                time.BilledHours = 0;
                time.PaidHours   = 0;
            }

            using (var invoices = Invoices.Where(i => !i.IsCancelled)
                                  .Where(i => i.UserId == userId)
                                  .OrderBy(i => i.At)
                                  .GetEnumerator())
            {
                if (!invoices.MoveNext())
                {
                    return;
                }

                var invoiceHours = invoices.Current.Hours;

                foreach (var time in dailyTimeToBill)
                {
                    var hoursToBill = time.TotalHours;
                    var lastInvoice = false;

                    while (hoursToBill > 0)
                    {
                        var billedHours = Math.Min(hoursToBill, invoiceHours);
                        result.Add(new Billing
                        {
                            At         = time.Date,
                            Hours      = billedHours,
                            InvoiceNum = invoices.Current.InvoiceNum,
                            IsPaid     = invoices.Current.IsPaid,
                            Rate       = time.HourlyRate,
                            UserId     = userId
                        });
                        time.BilledHours += billedHours;
                        time.PaidHours   += invoices.Current.IsPaid ? billedHours : 0;

                        hoursToBill  -= billedHours;
                        invoiceHours -= billedHours;

                        if (invoiceHours == 0)
                        {
                            if (invoices.MoveNext())
                            {
                                invoiceHours = invoices.Current.Hours;
                            }
                            else
                            {
                                lastInvoice = true;
                                break;
                            }
                        }
                    }

                    if (lastInvoice)
                    {
                        break;
                    }
                }
            }

            // replace user billing with new result
            _billing.RemoveAll(b => b.UserId == userId);
            _billing.AddRange(result);
        }
 public void SaveProjectDailyTime(DailyTime readModel)
 {
     Db.InsertOrReplace(readModel);
 }
Exemplo n.º 17
0
 public decimal MaxBillableHours(int userId)
 {
     return(DailyTime.Where(b => b.UserId == userId).SumOrDefault(b => b.TotalHours - b.BilledHours));
 }