/// <summary> /// Deduction total = amortized_amount * amortization /// </summary> public static Deduction CreateAmortized(Salary salary, int amortization, MonetaryValue amortized_amount, Date dt_granted = null, DeductionMode mode = DeductionMode.TEMPORARY) { return(Deduction.Create(salary , amortization , amortized_amount.multipliedBy(amortization) , dt_granted)); }
/// <summary> /// caso de uso "Crear producto" /// </summary> /// <param name="description"></param> /// <param name="name"></param> /// <param name="friendlyName"></param> /// <param name="price"></param> /// <param name="tax"></param> /// <param name="initialStock"></param> /// <param name="taxDescription"></param> /// <returns></returns> public ProductViewModel Create( string description, string name, string friendlyName, MonetaryValue price, MonetaryValue tax, QuantityValue initialStock, string taxDescription) { var product = new Product( description: description, name: name, friendlyName: friendlyName, price: price, tax: tax, taxDescription: taxDescription); // Hace el primer ajuste. product.AdjustStock(initialStock, "Initial Stock"); // Guarda el producto. repository.Insert(product); return(mapper.Map <ProductViewModel>(product)); }
private WaybillItem CreateItem() { var unit = new Unit( name: "шт", okeiCode: "шт"); var monetaryValue = new MonetaryValue( amount: 1, priceWithoutVat: 80508.47m, vatPercent: 18m, sumWithoutVat: 80508.47m, vatSum: 14491.53m, sumWithVat: 95000m ); var customsInfo = new WaybillCustomsInfo("RU", "320-ООУ", "71"); return(new WaybillItem( null, "Разработка проектно-сметной документации", "RVR-1", unit, monetaryValue, customsInfo )); }
public static WaybillItem MapToModel(this WaybillItemDto waybillItemDto) { var itemId = waybillItemDto.RezonItemId.HasValue ? new ItemId(waybillItemDto.RezonItemId.Value) : null; var unit = new Unit( name: waybillItemDto.Unit, okeiCode: waybillItemDto.UnitOkeiCode); var itemTotals = new MonetaryValue( amount: waybillItemDto.Amount, priceWithoutVat: waybillItemDto.PriceWithoutVat, vatPercent: waybillItemDto.VatPercent, sumWithoutVat: waybillItemDto.SumWithoutVat, vatSum: waybillItemDto.VatSum, sumWithVat: waybillItemDto.SumWithVat ); var customsInfo = new WaybillCustomsInfo( countryOfOriginName: waybillItemDto.CountryOfOriginName, customsDeclarationNumber: waybillItemDto.CustomsDeclarationNumber, countryOfOriginCode: waybillItemDto.CountryOfOriginCode ); return(new WaybillItem( itemId: itemId, name: waybillItemDto.Name, code: waybillItemDto.Code, unit: unit, monetaryValue: itemTotals, customsInfo: customsInfo )); }
public override void PerformTest() { MonetaryValue mv = new MonetaryValue(new Iso4217CurrencyCode(CurrencyCode), TestAmount, ZeroExponent); CheckValues(mv, TestAmount, ZeroExponent); mv = MonetaryValue.GetInstance(mv); CheckValues(mv, TestAmount, ZeroExponent); Asn1Sequence seq = (Asn1Sequence)Asn1Object.FromByteArray( mv.ToAsn1Object().GetEncoded()); mv = MonetaryValue.GetInstance(seq); CheckValues(mv, TestAmount, ZeroExponent); mv = MonetaryValue.GetInstance(null); if (mv != null) { Fail("null GetInstance() failed."); } try { MonetaryValue.GetInstance(new object()); Fail("GetInstance() failed to detect bad object."); } catch (ArgumentException) { // expected } }
public void default_payment_for_deduction_is_the_amortized_amount() { var d = Deduction.Create(salary, 3, MonetaryValue.of("php", 1000)); var p = DeductionPayment.Create(d); Assert.Equal(d.AmortizedAmount.DecimalValue(), p.PaidAmount.DecimalValue()); }
/// <summary> /// Caso de uso "Actualizar un producto" /// </summary> /// <param name="productId"></param> /// <param name="description"></param> /// <param name="name"></param> /// <param name="friendlyName"></param> /// <param name="price"></param> /// <param name="tax"></param> /// <param name="taxDescription"></param> /// <returns></returns> public ProductViewModel Update( int productId, string description = null, string name = null, string friendlyName = null, MonetaryValue price = null, MonetaryValue tax = null, string taxDescription = null) { var product = repository.GetById(productId); if (product == null) { throw new ProductNotFound(); } product .ChangeDescription(description) .ChangeName(name) .ChangeFriendlyName(friendlyName) .ChangePrice(price) .ChangeTax(tax, taxDescription); repository.Update(product); return(mapper.Map <ProductViewModel>(product)); }
protected void ComputeTotalPrice() { if (UnitPrice != null & Quantity != null) { TotalPrice = new MonetaryValue(UnitPrice.Value * Quantity.Value, UnitPrice.Currency); } }
public Product ChangePrice(MonetaryValue price) { if (price != null) { Price = price; } return(this); }
public Invoice( DateTime date, DateTime expirationDate, MonetaryValue totalReceived, Customer customer) { Date = date; ExpirationDate = expirationDate; TotalReceived = totalReceived; AddCustomerDetails(customer); }
/// <summary> /// Caso de uso "Crear factura" /// </summary> /// <param name="date"></param> /// <param name="expirationDate"></param> /// <param name="totalReceived"></param> /// <param name="productInputs"></param> /// <param name="customer"></param> /// <returns></returns> /// <exception cref="CustomerNotFound"></exception> /// <exception cref="ProductNotFound"></exception> public InvoiceViewModel Create( DateTime date, DateTime expirationDate, MonetaryValue totalReceived, int customerId, IEnumerable <ProductInputModel> productInputs) { var customer = customerRepository.GetById(customerId); if (customer is null) { throw new CustomerNotFound(); } // se crea la factura var invoice = new Invoice( date: date, expirationDate: expirationDate, totalReceived: totalReceived, customer: customer); // se agregan los productos. var productsUpdates = new List <Product>(); foreach (var productInput in productInputs) { var product = productRepository.GetById(productInput.ProductId); if (product == null) { throw new ProductNotFound(); } invoice.AddItem( name: product.Name, productId: product.Id, taxDescription: product.TaxDescription, unitPrice: product.Price, unitTax: product.Tax, quantity: productInput.Quantity); product.AdjustStock( new QuantityValue(productInput.Quantity.Value * (-1), productInput.Quantity.UnitMeasurement), "Sale"); productsUpdates.Add(product); } repository.Insert(invoice); productRepository.Update(productsUpdates); return(mapper.Map <InvoiceViewModel>(invoice)); }
public static Salary Create(Employee employee, MonetaryValue gross) { var record = new Salary { _employee = employee, Gross = gross, YearUpdated = Date.Now.Year }; EventBroker.getInstance().Command(new CommandAssociateSalaryToEmployee(record, employee)); return(record); }
public Product ChangeTax(MonetaryValue tax, string taxDescription) { if (taxDescription != null) { TaxDescription = taxDescription; } if (tax != null) { Tax = tax; } return(this); }
public void deduction_amortization_adjusted_when_custom_payment_was_made() { var d = Deduction.Create(salary, 3, MonetaryValue.of("php", 1000)); var actual = d.AmortizedAmount.DecimalValue(); var p = DeductionPayment.Create(d, MonetaryValue.of("php", 700)); Assert.Equal(d.Balance.DecimalValue(), 300); Assert.Equal(d.Paid.DecimalValue(), 700); Assert.Equal(d.Total.subtractValueOf(d.Paid).DecimalValue(), d.Balance.DecimalValue()); Assert.Equal(d.AmortizedAmount.DecimalValue(), (1000 - 700) / (3 - 1)); Assert.NotEqual(d.AmortizedAmount.DecimalValue(), actual); }
public static DeductionPayment Create(Deduction deduction, MonetaryValue custom_payment = null) { var record = new DeductionPayment { _employee = deduction.GetEmployee(), _deduction = deduction, // PaidAmount = (custom_payment is null) ? deduction.AmortizedAmount : custom_payment.PreciseValue PaidAmount = custom_payment ?? deduction.AmortizedAmount }; // emit event EventBroker.getInstance().Emit(new EventDeductionPaymentCreated(record, deduction)); return(record); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var jObject = JObject.Load(reader); if (jObject.HasValues) { var monetaryValue = new MonetaryValue( value: jObject["value"].Value <decimal>(), currency: jObject["currency"].Value <string>()); return(monetaryValue); } return(null); }
public void If_sums_are_valid_result_shows_no_errors() { var monetaryValue = new MonetaryValue( amount: 1, priceWithoutVat: 10, vatPercent: 10, sumWithoutVat: 10, vatSum: 1, sumWithVat: 11 ); var result = monetaryValue.Validate(); result.HasErrors.Should().BeFalse(); }
public WaybillItem( ItemId itemId, string name, string code, Unit unit, MonetaryValue monetaryValue, WaybillCustomsInfo customsInfo) { ItemId = itemId; Name = name; Code = code; Unit = unit; CustomsInfo = customsInfo; MonetaryValue = monetaryValue; }
/// <summary> /// Given deduction total /// </summary> public static Deduction Create(Salary salary, int amortization, MonetaryValue total, Date dt_granted = null, DeductionMode mode = DeductionMode.TEMPORARY) { var record = new Deduction { _salary = salary , Employee = salary.GetEmployee() , Total = total , _amortization = amortization , DateGranted = dt_granted ?? Date.TryParse(DateTime.Now.ToLongDateString()) , Mode = mode }; EventBroker.getInstance().Emit(new EventSalaryDeductionCreated(record, salary)); return(record); }
public Product( string description, string name, string friendlyName, MonetaryValue price, MonetaryValue tax, string taxDescription) { Description = description; Name = name; FriendlyName = friendlyName; Price = price; Tax = tax; TaxDescription = taxDescription; StockQuantity = new QuantityValue(0, string.Empty); }
public InvoiceItem( string name, int productId, string taxDescription, MonetaryValue unitPrice, MonetaryValue unitTax, QuantityValue quantity) { Name = name; ProductId = productId; Quantity = quantity; TaxDescription = taxDescription; UnitTax = unitTax; UnitPrice = unitPrice; ComputeTotalPrice(); }
public void valid_update_price_product() { // setp var product = ProductMother.MartilloProductWithStock(); repository.Setup(rp => rp.GetById(It.IsAny <int>())) .Returns(product); var newPrice = new MonetaryValue(100, "CO"); // act var productUpdate = updateManager.Update(product.Id, price: newPrice); productUpdate .Price .Should() .Be(newPrice); }
public TestFixture() { ISalaryRepository salary_repository = new SalaryRepository(); IEmployeeRepository employees_repository = new EmployeeRepository(); using (var uow = new NHUnitOfWork()) { var e = Employee.Create(Person.Create("juan", "santos", "puruntong", "", Gender.MALE, Date.Now), Date.Now); var s = Salary.Create(e, MonetaryValue.of("php", 10000)); var d = Deduction.Create(s, 3, MonetaryValue.of("php", 5000)); var da = Deduction.CreateAmortized(s, 12, MonetaryValue.of("php", 200), mode: DeductionMode.CONTINIOUS); var db = Deduction.CreateAmortized(s, 12, MonetaryValue.of("php", 300), mode: DeductionMode.CONTINIOUS); var dc = Deduction.CreateAmortized(s, 12, MonetaryValue.of("php", 400), mode: DeductionMode.CONTINIOUS); var e2 = Employee.Create(Person.Create("juan", "cruz", "dela cruz", "", Gender.MALE, Date.Now), Date.Now); var s2 = Salary.Create(e2, MonetaryValue.of("php", 15000)); var d2 = Deduction.Create(s2, 3, MonetaryValue.of("php", 3000)); var d2a = Deduction.CreateAmortized(s2, 12, MonetaryValue.of("php", 200), mode: DeductionMode.CONTINIOUS); var d2b = Deduction.CreateAmortized(s2, 12, MonetaryValue.of("php", 300), mode: DeductionMode.CONTINIOUS); var d2c = Deduction.CreateAmortized(s2, 12, MonetaryValue.of("php", 400), mode: DeductionMode.CONTINIOUS); var e3 = Employee.Create(Person.Create("ann", "santos", "cruz", "", Gender.FEMALE, Date.Now), Date.Now); var s3 = Salary.Create(e3, MonetaryValue.of("php", 13000)); var d3 = Deduction.Create(s3, 2, MonetaryValue.of("php", 2000)); var d3a = Deduction.CreateAmortized(s3, 12, MonetaryValue.of("php", 200), mode: DeductionMode.CONTINIOUS); var d3b = Deduction.CreateAmortized(s3, 12, MonetaryValue.of("php", 300), mode: DeductionMode.CONTINIOUS); var d3c = Deduction.CreateAmortized(s3, 12, MonetaryValue.of("php", 400), mode: DeductionMode.CONTINIOUS); var e4 = Employee.Create(Person.Create("audrey", "yin", "yang", "", Gender.FEMALE, Date.Now), Date.Now); var s4 = Salary.Create(e4, MonetaryValue.of("php", 14000)); var d4 = Deduction.Create(s4, 2, MonetaryValue.of("php", 5000)); var d4a = Deduction.CreateAmortized(s4, 12, MonetaryValue.of("php", 200), mode: DeductionMode.CONTINIOUS); var d4b = Deduction.CreateAmortized(s4, 12, MonetaryValue.of("php", 300), mode: DeductionMode.CONTINIOUS); var d4c = Deduction.CreateAmortized(s4, 12, MonetaryValue.of("php", 400), mode: DeductionMode.CONTINIOUS); employees_repository.Save(e); employees_repository.Save(e2); employees_repository.Save(e3); employees_repository.Save(e4); salary_repository.Save(s); salary_repository.Save(s2); salary_repository.Save(s3); salary_repository.Save(s4); uow.Commit(); } }
public void If_sum_with_vat_not_matches_sum_without_vat_result_shows_error() { var vatPercent = 10m; var sumWithoutVat = 10m; var sumWithVat = 11 + 1m; var monetaryValue = new MonetaryValue( amount: someAmount, priceWithoutVat: somePrice, vatPercent: vatPercent, sumWithoutVat: sumWithoutVat, vatSum: 10m, sumWithVat: sumWithVat ); var result = monetaryValue.Validate(); result.HasErrors.Should().BeTrue(); result.HasInvalidSumWithVat.Should().BeTrue(); }
public void AddItem( string name, int productId, string taxDescription, MonetaryValue unitPrice, MonetaryValue unitTax, QuantityValue quantity) { var invoiceItem = new InvoiceItem( name: name, productId: productId, taxDescription: taxDescription, unitPrice: unitPrice, unitTax: unitTax, quantity: quantity); _items?.Add(invoiceItem); RefreshTotalItems(); RefreshTotalPrice(); }
private void CheckValues( MonetaryValue mv, int amount, int exponent) { if (mv.Amount.IntValue != amount) { Fail("amounts don't match."); } if (mv.Exponent.IntValue != exponent) { Fail("exponents don't match."); } Iso4217CurrencyCode cc = mv.Currency; if (!cc.Alphabetic.Equals(CurrencyCode)) { Fail("currency code wrong"); } }
public void can_get_active_deductions() { using (var uow = new NHUnitOfWork()) { var employee = Employee.Create(Person.Create("a", "a", "a", "", Gender.MALE, Date.Now), Date.Now); var salary = Salary.Create(employee, MonetaryValue.of("PHP", 15000)); Deduction.Create(salary, 3, MonetaryValue.of("php", 1000)); Deduction.Create(salary, 3, MonetaryValue.of("php", 2000)); Deduction.Create(salary, 3, MonetaryValue.of("php", 3000)); // Deduction.Create(salary, 3, MonetaryValue.of("php", 0)); EventBroker.getInstance().Command(new CommandAssociateSalaryToEmployee(salary, employee)); _employees.Save(employee); _salaries.Save(salary); uow.Commit(); } using (var uow = new NHUnitOfWork()) { var ees = _employees.FetchAllActive(); var ds = _salaries.FetchEmployeeActiveDeduction(ees[0]); Assert.Equal(3, ds.Count); } }
// TODO: use CQRS Query private void onCommandIncludeSalaryDeductionInReport(object sender, Command cmd) { if (cmd is CommandIncludeSalaryDeductionInReport) { var args = cmd as CommandIncludeSalaryDeductionInReport; if (args.PayrollReport.Equals(this._payroll_report)) { foreach (var deduction in this._salary.ActiveDeductions) { // because deduction can be whole even if the payroll is half // we include the MonthlyUnit for deduction payment in CQRS command var amount = deduction.AmortizedAmount.PreciseValue * (decimal)args.MonthlyUnit; var payment = DeductionPayment.Create(deduction, MonetaryValue.of(deduction.MonetaryCode, amount)); this._deduction_payments.Add(payment); this._gross_deduction += payment.PaidAmount.PreciseValue; EventBroker.getInstance().Emit(new EventDeductionPaymentIncludedInPayroll(this._payroll_report, payment)); } } } }
public void valid_update_tax_product() { // setp var product = ProductMother.MartilloProductWithStock(); repository.Setup(rp => rp.GetById(It.IsAny <int>())) .Returns(product); var newTax = new MonetaryValue(100, "CO"); var taxDescription = "IVA 20% UP"; // act var productUpdate = updateManager.Update(product.Id, tax: newTax, taxDescription: taxDescription); productUpdate .Tax .Should() .Be(newTax); productUpdate .TaxDescription .Should() .Be(taxDescription); }
public void can_add_deduction() { var d = Deduction.Create(salary, 3, MonetaryValue.of("php", 1000)); Assert.Contains <Deduction>(d, salary.ActiveDeductions); }