public void CreateOrderAgreementFromRequisition_ValidStatus(RequisitionStatus status)
        {
            var requisition = MockRequisition;

            requisition.Status      = status;
            requisition.ProcessedAt = DateTime.Now;
            var agreement = new OrderAgreementModel(requisition, DateTime.UtcNow, MockEntities.MockRequisitionPriceRows);

            Assert.Equal(requisition.Request.Order.OrderNumber, agreement.OrderNumber);
        }
Пример #2
0
        private static void SerializeModel(OrderAgreementModel model, StreamWriter writer)
        {
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

            ns.Add(nameof(Constants.cac), Constants.cac);
            ns.Add(nameof(Constants.cbc), Constants.cbc);
            XmlSerializer xser = new XmlSerializer(typeof(OrderAgreementModel), Constants.defaultNamespace);

            xser.Serialize(writer, model, ns);
        }
Пример #3
0
        public async Task <string> CreateOrderAgreementFromRequest(int requestId, StreamWriter writer, int?previousOrderAgreementIndex = null)
        {
            _logger.LogInformation("Start serializing order agreement from {requestId}.", requestId);

            var request = await _tolkDbContext.Requests.GetRequestForAgreement(requestId);

            var model = new OrderAgreementModel(request, _clock.SwedenNow, _tolkDbContext.RequestPriceRows.GetPriceRowsForRequest(requestId).ToList());

            SerializeModel(model, writer);
            _logger.LogInformation("Finished serializing order agreement from {requestId}.", requestId);
            return(model.ID.Value);
        }
Пример #4
0
        public async Task <IActionResult> View(int id)
        {
            var orderAgreementPayload = await _dbContext.OrderAgreementPayloads.GetById(id);

            if (orderAgreementPayload != null &&
                _cacheService.CustomerSettings.Any(c => c.CustomerOrganisationId == orderAgreementPayload.Request.Order.CustomerOrganisationId && c.UsedCustomerSettingTypes.Any(cs => cs == CustomerSettingType.UseOrderAgreements)) &&
                (await _authorizationService.AuthorizeAsync(User, orderAgreementPayload, Policies.View)).Succeeded)
            {
                return(View(OrderAgreementModel.GetModelFromOrderAgreement(orderAgreementPayload)));
            }
            return(Forbid());
        }
        public void CreateOrderAgreementFromRequisition_TestIndex(int?previousIndex, int expectedIndex)
        {
            var requisition = MockRequisition;
            var agreement   = new OrderAgreementModel(requisition, DateTime.UtcNow, MockEntities.MockRequisitionPriceRows, previousIndex);

            Assert.Equal(agreement.Index, expectedIndex);
            Assert.Equal($"{Constants.IdPrefix}{requisition.Request.Order.OrderNumber}-{expectedIndex}", agreement.ID.Value);
            if (previousIndex.HasValue)
            {
                Assert.Equal($"{Constants.IdPrefix}{requisition.Request.Order.OrderNumber}-{previousIndex}", agreement.OrderReference.ID.Value);
            }
            else
            {
                Assert.Equal(Constants.NotApplicableNotification, agreement.OrderReference.ID.Value);
            }
        }
        private void CreateOrderAgreementFromRequests_Valid(bool useTwoBrookerFees)
        {
            var pricerows = useTwoBrookerFees ? MockEntities.MockRequestPriceRowsTwoBrokerFees : MockEntities.MockRequestPriceRows;
            var request   = MockRequest;
            var now       = DateTime.UtcNow;

            var agreement = new OrderAgreementModel(request, now, pricerows);

            Assert.Equal(request.Order.OrderNumber, agreement.SalesOrderID);
            Assert.Equal($"{Constants.IdPrefix}{request.Order.OrderNumber}-1", agreement.ID.Value);
            Assert.Equal(Constants.Currency, agreement.DocumentCurrencyCode);
            Assert.Equal(Constants.NotApplicableNotification, agreement.OrderReference.ID.Value);
            Assert.Equal(Constants.NotApplicableNotification, agreement.OrderReference.ID.Value);
            Assert.Equal(now.ToString("yyyy-MM-dd"), agreement.IssueDate);
            Assert.Equal(now.ToString("HH:mm:ss"), agreement.IssueTime);
            Assert.Equal(Constants.ContractNumber, agreement.Contract.ID.Value);
            Assert.Equal(request.Order.InvoiceReference, agreement.CustomerReference);
            Assert.Equal(Constants.Currency, agreement.DocumentCurrencyCode);
            Assert.Equal(OrderAgreementModel.OwnerPeppolId.Value, agreement.BuyerCustomerParty.Party.EndpointID.Value);
            Assert.Equal(request.Order.CustomerOrganisation.PeppolId, agreement.BuyerCustomerParty.Party.PartyIdentification.ID.Value);
            Assert.Equal(OrderAgreementModel.OwnerPeppolId.Value, agreement.SellerSupplierParty.Party.EndpointID.Value);
            Assert.Equal(request.Ranking.Broker.OrganizationNumber, agreement.SellerSupplierParty.Party.PartyIdentification.ID.Value);
            decimal sum = pricerows.Where(pr => pr.PriceRowType != PriceRowType.RoundedPrice).Sum(pr => pr.TotalPrice);

            Assert.Equal(sum, agreement.OrderLines.Sum(ol => ol.LineItem.Price.PriceAmount.AmountSum));
            Assert.Equal(sum, agreement.OrderLines.Sum(ol => ol.LineItem.LineExtensionAmount.AmountSum));
            Assert.Equal(sum, agreement.LegalMonetaryTotal.LineExtensionAmount.AmountSum);
            Assert.Equal(sum, agreement.LegalMonetaryTotal.TaxExclusiveAmount.AmountSum);

            //HARDCODED TEST FOR 25% VAT and the rounded amounts
            decimal taxAmount = sum * (decimal)0.25;
            decimal totalTaxInclusiveAmount = sum * (decimal)1.25;

            Assert.Equal(taxAmount, agreement.TaxTotal.TaxAmount.AmountSum);
            Assert.Equal(totalTaxInclusiveAmount, agreement.LegalMonetaryTotal.TaxInclusiveAmount.AmountSum);
            decimal rounding   = GetRounding(totalTaxInclusiveAmount);
            decimal roundedSum = totalTaxInclusiveAmount + rounding;

            Assert.Equal(rounding, agreement.LegalMonetaryTotal.PayableRoundingAmount.AmountSum);
            Assert.Equal(roundedSum, agreement.LegalMonetaryTotal.PayableAmount.AmountSum);
        }
        public void CreateOrderAgreementFromRequisition_IssuedDates(RequisitionStatus status, string generatedDateTime, string processedDateTime, bool expectsProcessedAt)
        {
            var requisition = MockRequisition;

            requisition.Status = status;
            if (expectsProcessedAt)
            {
                requisition.ProcessedAt = DateTime.Parse(processedDateTime);
            }
            var agreement = new OrderAgreementModel(requisition, DateTime.Parse(generatedDateTime), MockEntities.MockRequisitionPriceRows);

            if (expectsProcessedAt)
            {
                Assert.Equal(DateTime.Parse(processedDateTime).ToString("yyyy-MM-dd"), agreement.IssueDate);
                Assert.Equal(DateTime.Parse(processedDateTime).ToString("HH:mm:ss"), agreement.IssueTime);
            }
            else
            {
                Assert.Equal(DateTime.Parse(generatedDateTime).ToString("yyyy-MM-dd"), agreement.IssueDate);
                Assert.Equal(DateTime.Parse(generatedDateTime).ToString("HH:mm:ss"), agreement.IssueTime);
            }
        }