public void AcceptCustomerPayment(EntityRef <Customer> customer, decimal amount) { CustomerAccountLine accountLine = new CustomerAccountLine { Amount = amount, Customer = customer, Date = DateTime.Now, Description = "Customer Payment", Employee = this.Session.Employee }; this.AddCustomerAccountLine(accountLine); CashboxOperation cashboxOperation = new CashboxOperation { Amount = amount, Cashbox = this.Session.Cashbox, Date = DateTime.Now, Description = string.Format("Customer Payment: {0} ({1} {2})", customer.Entity.CustomerId, customer.Entity.FirstName, customer.Entity.LastName), Employee = this.Session.Employee }; this.cashboxProcesses.RegisterCashboxOperation(cashboxOperation); }
public void AddCustomerAccountLine(CustomerAccountLine accountLine) { Customer customer = accountLine.Customer.GetVanillaEntity(); customer.CurrentBalance += accountLine.Amount; StorageContext.Current.Update(customer); StorageContext.Current.Insert(accountLine); }
public void ReportLostBook(EntityRef <Rental> rentalRef) { if (rentalRef.IsNull) { throw new ArgumentNullException("rentalRef"); } Rental rental = rentalRef.GetVanillaEntity(); Book book = rental.Book.GetVanillaEntity(); // Check business rules. BusinessRulesManager.Assert("ReportLostBook", rental); // Apply the penalty. CustomerAccountLine penalty = new CustomerAccountLine { Customer = rental.Customer, Employee = this.Session.Employee, Rental = rentalRef, Date = DateTime.Today, Amount = -book.LostPenalty, Description = string.Format( "Lost of the book [{0}; {1}]", book.Authors, book.Title) }; this.customerProcesses.AddCustomerAccountLine(penalty); // Create a note for the penalty. Note note = new Note { Owner = rental, Employee = this.Session.Employee, Date = DateTime.Now, Title = "Penalty Applied", Text = string.Format( "A penalty of {2} EUR was applied for the lost of the book [{0}; {1}]", book.Authors, book.Title, -penalty.Amount) }; StorageContext.Current.Insert(note); // Update the rental. rental.ReturnDate = DateTime.Now; rental.Closed = true; StorageContext.Current.Update(rental); // Delete the book. book.Deleted = true; StorageContext.Current.Update(book); }
public void ReturnBook(EntityRef <Rental> rentalRef) { if (rentalRef.IsNull) { throw new ArgumentNullException("rentalRef"); } Rental rental = rentalRef.GetVanillaEntity(); // Check business rules. BusinessRulesManager.Assert("ReturnBook", rental); // Check if the book has been returned in time and apply penalty. if (DateTime.Today > rental.ScheduledReturnDate) { int delay = (int)Math.Ceiling((DateTime.Today - rental.ScheduledReturnDate).TotalDays); CustomerAccountLine penalty = new CustomerAccountLine { Customer = rental.Customer, Employee = this.Session.Employee, Rental = rentalRef, Date = DateTime.Today, Amount = -0.1M * delay, Description = string.Format( "Delay of {0} day(s) while returning the book [{1}; {2}]", delay, rental.Book.Entity.Authors, rental.Book.Entity.Title) }; this.customerProcesses.AddCustomerAccountLine(penalty); Note note = new Note { Owner = rental, Title = "Penalty Applied", Employee = this.Session.Employee, Date = DateTime.Now, Text = string.Format( "A penalty of {3} EUR was applied for a {0}-day(s) delay while returning the book [{1}; {2}]", delay, rental.Book.Entity.Authors, rental.Book.Entity.Title, -penalty.Amount) }; StorageContext.Current.Insert(note); } rental.ReturnDate = DateTime.Now; rental.Closed = true; StorageContext.Current.Update(rental); }