public async Task AddEditLocalContentTemplate(LocalContentModel model, int branchId)
        {
            IsValidToAddEditLocalContentModel(model);
            Tender tender = await _tenderQueries.FindTenderWithConditionsTemplateById(Util.Decrypt(model.EncryptedTenderId), branchId);

            var templates = await _tenderQueries.FindTenderForLocalContentByTenderId(Util.Decrypt(model.EncryptedTenderId), branchId);

            if (tender == null)
            {
                throw new UnHandledAccessException(Resources.SharedResources.ErrorMessages.YouHaveNoAccess);
            }
            var versionId = await _tenderQueries.GetCurrentTenderActivityVersion(tender.TenderId);

            if (tender.TenderLocalContent == null)
            {
                tender.CreateTenderLocalContent();
            }

            IsValidToAddEditLocalContent(tender, templates, model);
            var tenderAttachments = new List <TenderAttachment>();

            foreach (var item in model.TenderAttachments)
            {
                tenderAttachments.Add(new TenderAttachment(item.Name, item.FileNetReferenceId, item.AttachmentTypeId, null, null));
            }
            if (model.TenderAttachments.Any())
            {
                tender.UpdateLocalContentAttachments(tenderAttachments, _httpContextAccessor.HttpContext.User.UserId());
            }
            if (versionId >= (int)Enums.ActivityVersions.Sprint7Activities)
            {
                var hasInvitation = ((tender.PreQualificationId != null || tender.TenderTypeId == (int)Enums.TenderType.SecondStageTender || tender.TenderTypeId == (int)Enums.TenderType.NewDirectPurchase || tender.TenderTypeId == (int)Enums.TenderType.ReverseBidding ||
                                      tender.TenderTypeId == (int)Enums.TenderType.LimitedTender || tender.TenderTypeId == (int)Enums.TenderType.FrameworkAgreement || tender.TenderTypeId == (int)Enums.TenderType.Competition || tender.TenderTypeId == (int)Enums.TenderType.NationalTransformationProjects) && tender.InvitationTypeId == (int)Enums.InvitationType.Specific) ||
                                    (tender.TenderTypeId == (int)Enums.TenderType.CurrentDirectPurchase && tender.OfferPresentationWayId == (int)Enums.OfferPresentationWayId.TwoSepratedFiles);
                if (!hasInvitation)
                {
                    tender.UpdateTenderStatus(Enums.TenderStatus.Established, "", _httpContextAccessor.HttpContext.User.UserId(), TenderActions.CreateTender);
                }
                else
                {
                    tender.UpdateTenderStatus(Enums.TenderStatus.UnderEstablishing);
                }
            }


            UpdateTenderConditionTemplateStatusId(tender, Enums.TenderConditoinsStatus.LocalContent);
            tender.TenderLocalContent.UpdateTenderLocalContent(tender.TenderId, model.LocalContentMechanismIDs, model.IsApplyProvisionsMandatoryList, model.MinimumBaseline, model.MinimumPercentageLocalContentTarget);
            await _tenderCommands.UpdateAsync(tender);
        }
 private void IsValidToAddEditLocalContentModel(LocalContentModel model)
 {
     if (model.LocalContentMechanismIDs == null || !model.LocalContentMechanismIDs.Any())
     {
         throw new BusinessRuleException(Resources.TenderResources.ErrorMessages.LocalContentMechanismIMessage);
     }
     if (model.LocalContentMechanismIDs.Any(x => x == (int)Enums.LocalContentMechanism.LocalContentConditionsWeight) && model.LocalContentMechanismIDs.Any(x => x == (int)Enums.LocalContentMechanism.MinimumBaseline))
     {
         throw new BusinessRuleException("لا يمكن الجمع بين ألية الحد الادنى وآلية وزن المحتوى المحلي");
     }
     if (model.LocalContentMechanismIDs.Any(x => x == (int)Enums.LocalContentMechanism.LocalContentConditionsWeight) && (model.MinimumBaseline > 100 || model.MinimumBaseline < 0))
     {
         throw new BusinessRuleException("الرجاء ادخال قيمة الحد الأدنى لخط الأساس اكبر من او يساوي صفر و اقل من او يساوي مائة");
     }
     if (model.LocalContentMechanismIDs.Any(x => x == (int)Enums.LocalContentMechanism.MinimumBaseline) && (model.MinimumPercentageLocalContentTarget > 100 || model.MinimumPercentageLocalContentTarget < 0))
     {
         throw new BusinessRuleException("الرجاء ادخال قيمة الحد الادنى لنسبة المحتوى المحلي المستهدفة اكبر من او يساوي صفر و اقل من او يساوي مائة");
     }
     if (model.LocalContentMechanismIDs.Any(x => x == (int)Enums.LocalContentMechanism.MinimumBaseline) && string.IsNullOrEmpty(model.StudyMinimumTargetFileNetReferenceId))
     {
         throw new BusinessRuleException("الرجاء ارفاق ملف دراسة الحد الأدنى للمحتوى المحلي المستهدف");
     }
 }
 private void IsValidToAddEditLocalContent(Tender tender, List <Template> templates, LocalContentModel model)
 {
     if ((!model.LocalContentMechanismIDs.Any(x => x == (int)Enums.LocalContentMechanism.LocalContentConditionsWeight) && !model.LocalContentMechanismIDs.Any(x => x == (int)Enums.LocalContentMechanism.MinimumBaseline)) && !tender.IsTenderContainsTawreedTables.Value && tender.EstimatedValue > 50000000 && !templates.Any(x => x.ActivitytemplatId == 22 || x.ActivitytemplatId == 13))
     {
         throw new BusinessRuleException("الرجاء اختيار اختيار آلية وزن المحتوى المحلي او الحد الادني المطلوب للمحتوي المحلي");
     }
 }