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); } }
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); }
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); }
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); }
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); }
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)); }
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); }
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); }
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)); }
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")); }
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); }
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); }
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")); }
/// <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); }
public decimal MaxBillableHours(int userId) { return(DailyTime.Where(b => b.UserId == userId).SumOrDefault(b => b.TotalHours - b.BilledHours)); }