private async Task CalculateFinalPriceDirectPurchase(Offer offer) { FormConfigurationDTO DTOModel = new FormConfigurationDTO() { SubmitAction = "", TenderId = offer.TenderId, HasAlternative = offer.Tender.HasAlternativeOffer.HasValue && offer.Tender.HasAlternativeOffer.Value, CanEditAlternative = offer.Tender.HasAlternativeOffer.HasValue && offer.Tender.HasAlternativeOffer.Value, AllowEdit = false, ApplySelected = true, ActivityId = 1, EncryptedOfferId = Util.Encrypt(offer.OfferId), EncryptedTenderId = Util.Encrypt(offer.TenderId), IsTenderContainsTawreed = offer.Tender.IsTenderContainsTawreedTables.HasValue && offer.Tender.IsTenderContainsTawreedTables.Value, QuantityItemDtos = offer.SupplierTenderQuantityTables.SelectMany(q => q.QuantitiyItemsJson.SupplierTenderQuantityTableItems).Select(qq => new TenderQuantityItemDTO { ColumnId = qq.ColumnId, ItemNumber = qq.ItemNumber, ColumnName = "", TableName = offer.SupplierTenderQuantityTables.FirstOrDefault(a => a.IsActive == true && a.QuantitiyItemsJson != null && a.QuantitiyItemsJson.SupplierTenderQuantityTableItems.Any(i => i.Id == qq.Id)).Name, TableId = offer.SupplierTenderQuantityTables.FirstOrDefault(a => a.IsActive == true && a.QuantitiyItemsJson != null && a.QuantitiyItemsJson.SupplierTenderQuantityTableItems.Any(i => i.Id == qq.Id)).Id, TemplateId = qq.ActivityTemplateId, TenderId = offer.TenderId, TenderFormHeaderId = qq.TenderFormHeaderId, Value = qq.Value, AlternativeValue = qq.AlternativeValue, IsDefault = qq.IsDefault, Id = qq.Id, }).ToList(), NPpercentage = offer.Tender.NationalProductPercentage / 100 ?? 0, YearsCount = (offer.Tender.TemplateYears.HasValue ? offer.Tender.TemplateYears.Value : 0) }; ApiResponse <TotalCostDTO> obj = await _qantityTemplatesProxy.GetTotalCostForChecking(DTOModel); if (obj.StatusCode == 200) { offer.UpdateFinalPriceAfterDiscount(obj.Data.TotalCostWithdiscount); } else { throw new BusinessRuleException("حدث خطأ اثناء حساب قيمة العرض"); } if (DTOModel.IsTenderContainsTawreed || offer.Tender.TenderActivities.Any(a => a.Activity.ActivityTemplateVersions.Any(t => t.TemplateId == (int)Enums.ConditionsTemplateCategory.GeneralSuppliesSupply || t.TemplateId == (int)Enums.ConditionsTemplateCategory.GeneralSupply))) { ApiResponse <TotalCostDTO> npObj = await _qantityTemplatesProxy.GetSupplierTotalCostNP(DTOModel); offer.UpdateOfferWeightAfterCalcNPA(npObj.Data?.TotalCostNP); } else { if (obj.StatusCode == 200) { offer.UpdateOfferWeightAfterCalcNPA(obj.Data?.TotalCostWithdiscount); } } }
private async Task CalcFinalPrice(Offer offer) { FormConfigurationDTO DTOModel = new FormConfigurationDTO() { SubmitAction = "", TenderId = offer.TenderId, HasAlternative = offer.Tender.HasAlternativeOffer ?? false, CanEditAlternative = offer.Tender.HasAlternativeOffer ?? false, AllowEdit = false, ActivityId = 1, ApplySelected = offer.Tender.HasAlternativeOffer ?? false, EncryptedOfferId = Util.Encrypt(offer.OfferId), EncryptedTenderId = Util.Encrypt(offer.TenderId), QuantityItemDtos = offer.SupplierTenderQuantityTables.SelectMany(q => q.QuantitiyItemsJson.SupplierTenderQuantityTableItems).Select(qq => new TenderQuantityItemDTO { ColumnId = qq.ColumnId, ItemNumber = qq.ItemNumber, ColumnName = "", TableName = offer.SupplierTenderQuantityTables.FirstOrDefault(a => a.IsActive == true && a.QuantitiyItemsJson != null && a.QuantitiyItemsJson.SupplierTenderQuantityTableItems.Any(i => i.Id == qq.Id)).Name, TableId = offer.SupplierTenderQuantityTables.FirstOrDefault(a => a.IsActive == true && a.QuantitiyItemsJson != null && a.QuantitiyItemsJson.SupplierTenderQuantityTableItems.Any(i => i.Id == qq.Id)).Id, TemplateId = qq.ActivityTemplateId, TenderId = offer.TenderId, TenderFormHeaderId = qq.TenderFormHeaderId, Value = qq.Value, AlternativeValue = qq.AlternativeValue, IsDefault = qq.IsDefault, Id = qq.Id }).ToList(), YearsCount = (offer.Tender.TemplateYears ?? 0) }; ApiResponse <TotalCostDTO> obj; obj = await _qantityTemplatesProxy.GetTotalCostForChecking(DTOModel); if (obj.StatusCode == 200) { offer.SetFinalPrice(obj.Data.TotalCostWithdiscount); } }
public async Task <string> ValidateandSaveVROCheckingQuantitiesTable(Dictionary <string, string> AuthorList) { int tenderId = Util.Decrypt(AuthorList["EncryptedTenderId"]); int offerId = Util.Decrypt(AuthorList["EncryptedOfferId"]); int formId = int.Parse(AuthorList["FormId"]); int tableId = int.Parse(AuthorList["TableId"]); var offer = await _offerQueries.FindOfferWithStatusById(offerId); var Qitems = await _offerQueries.GetSupplierQTableItemsByTableId(offerId, tableId); foreach (KeyValuePair <string, string> entry in AuthorList) { if (!entry.Key.Contains("IsDefault")) { continue; } var _itemNumber = int.Parse(entry.Key.Split('_')[2]); var SQTItem = Qitems.Where(d => d.ItemNumber == _itemNumber).Select(d => d.Id).ToList(); bool isDefualt = bool.Parse(entry.Value); Dictionary <long, bool> keyValues = SQTItem.Select(x => new KeyValuePair <long, bool>(x, isDefualt)).ToDictionary(x => x.Key, x => x.Value); offer.UpdateOfferSupplierQItemsDefault(keyValues, tableId); } FormConfigurationDTO DTOModel = new FormConfigurationDTO() { SubmitAction = "/Offer/SaveCheckingQuantityItem", TenderId = offer.TenderId, HasAlternative = offer.Tender.HasAlternativeOffer ?? false, CanEditAlternative = offer.Tender.HasAlternativeOffer ?? false, AllowEdit = true, ActivityId = 1, EncryptedOfferId = Util.Encrypt(offer.OfferId), EncryptedTenderId = Util.Encrypt(offer.TenderId), QuantityItemDtos = offer.SupplierTenderQuantityTables.SelectMany(q => q.QuantitiyItemsJson.SupplierTenderQuantityTableItems).Select(qq => new TenderQuantityItemDTO { ColumnId = qq.ColumnId, ItemNumber = qq.ItemNumber, ColumnName = "", TableName = offer.SupplierTenderQuantityTables.FirstOrDefault(a => a.IsActive == true && a.QuantitiyItemsJson != null && a.QuantitiyItemsJson.SupplierTenderQuantityTableItems.Any(i => i.Id == qq.Id)).Name, TableId = offer.SupplierTenderQuantityTables.FirstOrDefault(a => a.IsActive == true && a.QuantitiyItemsJson != null && a.QuantitiyItemsJson.SupplierTenderQuantityTableItems.Any(i => i.Id == qq.Id)).Id, TemplateId = qq.ActivityTemplateId, TenderId = offer.TenderId, TenderFormHeaderId = qq.TenderFormHeaderId, Value = qq.Value, AlternativeValue = qq.AlternativeValue, IsDefault = qq.IsDefault, Id = qq.Id }).ToList(), YearsCount = (offer.Tender.TemplateYears ?? 0) }; ApiResponse <List <TableTemplateDTO> > obj; obj = await _qantityTemplatesProxy.ValidateCheckingData(DTOModel); if (obj.StatusCode == 200) { var items = obj.Data.FirstOrDefault().QuantityItemDtos.Select(item => new SupplierTenderQuantityTableItem() { ColumnId = item.ColumnId, Id = item.Id, TenderFormHeaderId = item.TenderFormHeaderId, ActivityTemplateId = item.TemplateId, Value = item.Value, AlternativeValue = item.AlternativeValue, IsDefault = item.IsDefault, ItemNumber = item.ItemNumber }).ToList(); await CalcFinalPrice(offer); await _offerCommands.UpdateAsync(offer); await _offerCommands.SaveAsync(); } return(obj.Data.FirstOrDefault().FormHtml); }
public async Task <QueryResult <TableModel> > GetOfferTableQuantityItemsVRO(QuantityTableSearchCretriaModel quantityTableSearchCretriaModel) { var cellsCount = 0; cellsCount = await _offerQueries.GetOfferTableQuantityItems(quantityTableSearchCretriaModel.QuantityTableId); quantityTableSearchCretriaModel.CellsCount = cellsCount; var offer = await _offerQueries.FindOfferWithStatusById(quantityTableSearchCretriaModel.OfferId); var quantityItems = await _offerQueries.GetSupplierQTableItemsForChecking(quantityTableSearchCretriaModel); QuantitiesTemplateModel lst = await _offerQueries.GetOfferQuantityItems(quantityTableSearchCretriaModel.OfferId, quantityTableSearchCretriaModel.QuantityTableId); lst.QuantitiesItems = quantityItems.Items.ToList(); if (lst == null) { lst = new QuantitiesTemplateModel(); } lst.grid = new List <string>(); lst.ActivityTemplates = new List <int> { (int)TenderActivityTamplate.OldSystemAndVRO }; foreach (var item in lst.ActivityTemplates) { FormConfigurationDTO DTOModel = new FormConfigurationDTO() { SubmitAction = "/Offer/SaveVROCheckingQuantityItem", TenderId = quantityTableSearchCretriaModel.TenderId, HasAlternative = offer.Tender.HasAlternativeOffer ?? false, ApplySelected = offer.Tender.HasAlternativeOffer ?? false, CanEditAlternative = ((_httpContextAccessor.HttpContext.User.IsInRole(RoleNames.OffersOpeningAndCheckSecretary) && (offer.Tender.TenderStatusId == (int)Enums.TenderStatus.VROFinancialCheckingOpening || offer.Tender.TenderStatusId == (int)Enums.TenderStatus.VROOffersFinancialChecking))) ? true : false, AllowEdit = false, ActivityId = 1, EncryptedOfferId = Util.Encrypt(quantityTableSearchCretriaModel.OfferId), EncryptedTenderId = Util.Encrypt(quantityTableSearchCretriaModel.TenderId), QuantityItemDtos = lst.QuantitiesItems.ToList(), YearsCount = (offer.Tender.TemplateYears ?? 0) }; ApiResponse <List <HtmlTemplateDto> > resultList = new ApiResponse <List <HtmlTemplateDto> >(); ApiResponse <HtmlTemplateDto> resultItem = new ApiResponse <HtmlTemplateDto>(); if (_httpContextAccessor.HttpContext.User.IsInRole(RoleNames.OffersOpeningAndCheckSecretary) && (offer.Tender.TenderStatusId == (int)Enums.TenderStatus.VROOffersFinancialChecking || offer.Tender.TenderStatusId == (int)Enums.TenderStatus.VROFinancialCheckingOpening)) { resultList = resultList = await _qantityTemplatesProxy.GetMonafasatSupplierForChecking(DTOModel); } else { resultList = await _qantityTemplatesProxy.GenerateSupplierReadOnlyTemplate(DTOModel); } HTMLObject obje = new HTMLObject(); ApiResponse <List <HtmlTemplateDto> > obj = new ApiResponse <List <HtmlTemplateDto> > { Data = resultList.Data }; if (obj.Data != null && obj.Data.Count > 0 && obj.Data[0] != null) { lst.grid.AddRange(obj.Data.Select(a => a.FormHtml).ToList()); obje.grid.AddRange(obj.Data.Select(a => a.FormHtml).ToList()); lst.grids.AddRange(obj.Data.GroupBy(o => new { o.FormId, o.FormName, o.TemplateName, o.FormExcellTemplate }).Select(o => new HTMLObject { FormId = o.Key.FormId, FormName = o.Key.FormName, TemplateName = o.Key.TemplateName, FormExcellTemplate = _configuration.APIConfiguration.QuantityTemplates + "/api/QuantityTable/" + o.Key.FormExcellTemplate, Javascript = o.FirstOrDefault().JsScript, gridTables = o.Select(u => new TableModel { TableHtml = u.FormHtml, TableId = u.TableId, TableName = !string.IsNullOrEmpty(u.TableName) ? u.TableName : "اسم الجدول", FormId = u.FormId, DeleteFormHtml = u.DeleteFormHtml, EditFormHtml = u.EditFormHtml, Javascript = u.JsScript }).ToList() }).ToList()); } } lst.IsReadOnly = quantityTableSearchCretriaModel.IsReadOnly; return(new QueryResult <TableModel>(lst.grids[0].gridTables.ToList(), quantityItems.TotalCount, quantityTableSearchCretriaModel.PageNumber, quantityTableSearchCretriaModel.PageSize * cellsCount)); }