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);
                }
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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));
        }