Exemple #1
0
 /// <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
            }
        }
Exemple #6
0
        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());
        }
Exemple #7
0
        /// <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);
     }
 }
Exemple #9
0
 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));
        }
Exemple #12
0
        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);
        }
Exemple #13
0
 public Product ChangeTax(MonetaryValue tax, string taxDescription)
 {
     if (taxDescription != null)
     {
         TaxDescription = taxDescription;
     }
     if (tax != null)
     {
         Tax = tax;
     }
     return(this);
 }
Exemple #14
0
        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);
        }
Exemple #15
0
        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);
        }
Exemple #16
0
        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();
        }
Exemple #18
0
 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;
 }
Exemple #19
0
        /// <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);
        }
Exemple #20
0
 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();
 }
Exemple #22
0
        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);
        }
Exemple #23
0
        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);
            }
        }
Exemple #28
0
        // 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));
                    }
                }
            }
        }
Exemple #29
0
        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);
        }
Exemple #30
0
        public void can_add_deduction()
        {
            var d = Deduction.Create(salary, 3, MonetaryValue.of("php", 1000));

            Assert.Contains <Deduction>(d, salary.ActiveDeductions);
        }