public void PgPurchaseOrder_schema_validation() { // Arrange var pgPurchaseOrder = new PgPurchaseOrder { TotalAmount = 123, CostNumber = "TestCostNumber1", PaymentAmount = 111, AccountCode = "TestAccountCode", BasketName = "TestBasketName", CategoryId = "MGCCode", Currency = "CurrencyName", DeliveryDate = DateTime.Parse("2017-08-09T11:26:45.345Z"), Description = "TestDescription", GL = "GLCode", GrNumbers = new[] { "Number1" }, IONumber = "IONumber", ItemIdCode = "ItemIdCode", LongText = new PgPurchaseOrder.LongTextField { AN = new List <string> { "AN1" }, BN = new List <string> { "BN1" }, VN = new List <string> { "VN1" } }, TNumber = "TNUmber", RequisitionerEmail = "RequisitionerEmail", PoNumber = "PONumber", StartDate = DateTime.Parse("2017-08-30T11:26:45.345Z"), Vendor = "VendorCode", Commodity = "CostTypeBuyoutTypeCombined" }; var serialized = JsonConvert.SerializeObject(pgPurchaseOrder, Formatting.None, SerializerSettings); // Act var jobject = JObject.Parse(serialized); // Assert jobject.IsValid(_schema, out IList <string> errors).Should().BeTrue(GetSchemaValidationAssertionReason(errors)); }
public async Task <PgPurchaseOrder> GetPurchaseOrder(CostStageRevisionStatusChanged stageRevisionStatusChanged) { var costData = await _efContext.Cost .Include(c => c.LatestCostStageRevision) .ThenInclude(csr => csr.CostStage) .Where(c => c.Id == stageRevisionStatusChanged.AggregateId) .Include(c => c.Parent) .ThenInclude(p => p.Agency) .Select(c => new { BrandName = c.Project.Brand != null ? c.Project.Brand.Name : string.Empty, CostNumber = c.CostNumber, CostId = c.Id, StageDetailsData = c.LatestCostStageRevision.StageDetails.Data, ProductionDetailsData = c.LatestCostStageRevision.ProductDetails.Data, LatestCostStageRevisionId = c.LatestCostStageRevision.Id, AgencyLabels = c.Parent.Agency.Labels, CostStageRevisionKey = c.LatestCostStageRevision.CostStage.Key, CostStageRevisionName = c.LatestCostStageRevision.CostStage.Name, Requisitioner = c.LatestCostStageRevision.Approvals .Where(a => a.Type == ApprovalType.Brand && a.Requisitioners.Any()) .SelectMany(a => a.Requisitioners) .Select(r => r.CostUser) .FirstOrDefault(), CostType = c.CostType, ExchangeRate = c.ExchangeRate }) .FirstOrDefaultAsync(); if (costData == null) { _logger.Error($"Couldn't find cost with id {stageRevisionStatusChanged.AggregateId}"); return(null); } var purchaseOrderDto = new PgPurchaseOrderDTO { BrandName = costData.BrandName, CostNumber = costData.CostNumber, StageDetailsData = costData.StageDetailsData, ProductionDetailsData = costData.ProductionDetailsData, LatestCostStageRevisionId = costData.LatestCostStageRevisionId, AgencyLabels = costData.AgencyLabels, CostStageRevisionKey = costData.CostStageRevisionKey, CostStageRevisionName = costData.CostStageRevisionName, RequisitionerEmail = costData.Requisitioner?.Email, TNumber = costData.Requisitioner?.FederationId }; var stageDetailsForm = JsonConvert.DeserializeObject <PgStageDetailsForm>(purchaseOrderDto.StageDetailsData); var productionDetailsForm = purchaseOrderDto.ProductionDetailsData != null?JsonConvert.DeserializeObject <PgProductionDetailsForm>(purchaseOrderDto.ProductionDetailsData) : null; var paymentAmount = await GetTotals(stageRevisionStatusChanged.CostStageRevisionId, costData.ExchangeRate); var applicableCurrencyCode = await _currencyService.GetCurrencyCode(stageDetailsForm.AgencyCurrency, productionDetailsForm); var ledgerMaterialCode = await _ledgerMaterialCode.GetLedgerMaterialCodes(purchaseOrderDto.LatestCostStageRevisionId); var purchaseOrderResponse = await _customDataService.GetCustomData <PgPurchaseOrderResponse>(purchaseOrderDto.LatestCostStageRevisionId, CustomObjectDataKeys.PgPurchaseOrderResponse); var paymentDetails = await _customDataService.GetCustomData <PgPaymentDetails>(purchaseOrderDto.LatestCostStageRevisionId, CustomObjectDataKeys.PgPaymentDetails); var purchaseOrder = new PgPurchaseOrder { BasketName = GetBasketName(purchaseOrderDto, stageDetailsForm), Description = GetDescription(purchaseOrderDto, stageDetailsForm), TotalAmount = paymentAmount.TotalAmount, PaymentAmount = paymentAmount.PaymentAmount, StartDate = stageRevisionStatusChanged.TimeStamp, CostNumber = purchaseOrderDto.CostNumber ?? "", Currency = applicableCurrencyCode, CategoryId = ledgerMaterialCode?.MgCode ?? "", GL = ledgerMaterialCode?.GlCode ?? "", DeliveryDate = GetDeliveryDate(stageRevisionStatusChanged.TimeStamp), IONumber = !string.IsNullOrEmpty(paymentDetails?.IoNumber) ? $"00{paymentDetails.IoNumber}" : "", LongText = GetLongTextField(stageRevisionStatusChanged, purchaseOrderDto, stageDetailsForm, purchaseOrderResponse, paymentAmount.PaymentAmount, applicableCurrencyCode, costData.CostType), TNumber = purchaseOrderDto.TNumber ?? "", RequisitionerEmail = purchaseOrderDto.RequisitionerEmail ?? "", Vendor = GetVendor(purchaseOrderDto, productionDetailsForm) ?? "", PoNumber = paymentDetails?.PoNumber ?? "", AccountCode = purchaseOrderResponse?.AccountCode ?? "", ItemIdCode = purchaseOrderResponse?.ItemIdCode ?? "", GrNumbers = await GetGrNumbers(stageRevisionStatusChanged), Commodity = GetCommodity(costData.CostType, stageDetailsForm) }; return(purchaseOrder); }