/// <summary> /// /// </summary> /// <param name="disk"></param> /// <returns> /// Have late charge return 1 /// Not have late charge return 0 /// error return 1 /// exception return 2 /// </returns> public int ReturnDisk(Disk disk, DateTime dateReturn) { if (disk != null) { AddLateCharge addLateCharge = new AddLateCharge(); RentalRecordDetail detailLatest = detailRepository.GetLatest(disk.DiskID); RentalRecord rentalRecord = recordRepository.Get(detailLatest.RentalRecordID); if (detailLatest != null) { if (dateReturn > detailLatest.DateReturn.Date) { int result = addLateCharge.Add(disk.DiskID, dateReturn); if (result >= 0) { return(1); } else { return(-1); } } else if (dateReturn < rentalRecord.DateRental) { return(3); } else { using (TransactionScope transaction = new TransactionScope()) { try { detailLatest.DateReturnActual = dateReturn; detailRepository.Update(detailLatest); diskRepository.ModifyStatus(disk, StatusOfDisk.ON_SHELF); //reservationRepository.AddReservationReturnDisk(disk.DiskID); transaction.Complete(); return(0); } catch { transaction.Dispose(); return(-2); } } } } } return(-1); }
/// <summary> /// Initialize RentalRecordDetail with each disk /// Calculate the date return, get the price information of each disk. /// </summary> /// <param name="disks"></param> /// <returns>List<RentalRecordDetail></returns> public List <RentalRecordDetail> Initialize(List <Disk> disks) { if (disks != null) { List <RentalRecordDetail> lstRentalRecordDetail = new List <RentalRecordDetail>(); foreach (Disk disk in disks) { RentalRecordDetail rentalRecordDetail = new RentalRecordDetail(); rentalRecordDetail.DiskID = disk.DiskID; rentalRecordDetail.DateReturn = DateTime.Now.AddDays(disk.TitleDisk.TypeDisk.Period); rentalRecordDetail.PriceRental = disk.TitleDisk.TypeDisk.Cost; lstRentalRecordDetail.Add(rentalRecordDetail); } return(lstRentalRecordDetail); } return(null); }
/// <summary> /// Modify list RentalRecordDetail exist /// </summary> /// <param name="disks"></param> /// <param name="list"></param> /// <returns>List<RentalRecordDetail></returns> public List <RentalRecordDetail> Modify(List <Disk> disks, List <RentalRecordDetail> list) { if (disks != null && list != null) { foreach (Disk disk in disks) { if (!ContainsDisk(list, disk)) { RentalRecordDetail rentalRecordDetail = new RentalRecordDetail(); rentalRecordDetail.DiskID = disk.DiskID; rentalRecordDetail.DateReturn = DateTime.Now.AddDays(disk.TitleDisk.TypeDisk.Period); rentalRecordDetail.PriceRental = disk.TitleDisk.TypeDisk.Cost; list.Add(rentalRecordDetail); } } } return(list); }
/// <summary> /// /// </summary> /// <param name="diskId"></param> /// <returns> /// Have late charge and add success return 1 /// Have late charge and add fail return -1 /// Not have late charge return 0 /// Order return -2 /// </returns> public int Add(int diskId, DateTime DateReturn) { //Check status disk DiskRepository diskRepository = new DiskRepository(new DBVRContext()); Disk disk = diskRepository.Get(diskId); if (disk != null) { if (disk.Status.Equals(StatusOfDisk.RENTED)) { RentalRecordDetail detail = detailRepository.GetLatest(diskId); if (detail != null) { using (TransactionScope transaction = new TransactionScope()) { try { detail.DateReturnActual = DateReturn; detail.LateCharge = disk.TitleDisk.TypeDisk.LateCharge; detailRepository.Update(detail); diskRepository.ModifyStatus(disk, StatusOfDisk.ON_SHELF); transaction.Complete(); return(1); } catch { transaction.Dispose(); return(0); } } } return(-1); } } return(-2); }
public void UpdateLateCharge(RentalRecordDetail detail) { detailRepository.UpdateLateCharge(detail); }