Пример #1
0
        public async Task <SupplierBlock> AddAdminBlock(SupplierBlockModel blockModel)
        {
            SupplierBlock block    = new SupplierBlock(blockModel.CommercialRegistrationNo, blockModel.CommercialSupplierName, blockModel.ResolutionNumber, blockModel.BlockStatusId, 2, blockModel.AgencyCode, blockModel.BlockStartDate, blockModel.BlockEndDate, blockModel.Punishment, blockModel.BlockDetails, blockModel.AdminFileName, blockModel.AdminFileNetReferenceId, blockModel.SecretaryFileName, blockModel.SecretaryFileNetReferenceId, blockModel.AdminBlockReason, blockModel.SecretaryBlockReason, blockModel.SupplierTypeId, blockModel.OrganizationTypeId, blockModel.CommercialRegistrationNo, blockModel.CommercialRegistrationNo, false);
            string        crNumber = blockModel.CommercialRegistrationNo;
            var           supplier = await _supplierQueries.FindSupplierByCRNumber(crNumber);

            if (supplier == null)
            {
                Supplier supplierobj = new Supplier(crNumber, blockModel.CommercialSupplierName, await _notificationAppService.GetDefaultSettingByCr());
                await _genericrepository.CreateAsync <Supplier>(supplierobj);
            }
            else
            {
                List <UserNotificationSetting> defaultNotificationSettings = await _notificationAppService.GetDefaultSettingByCr();

                supplier.AddNotificationSettings(defaultNotificationSettings);
                _genericrepository.Update(supplier);
            }

            QueryResult <SupplierBlockModel> supplierBlock = await _blockQueries.FindBlockedUser(new BlockSearchCriteria { AgencyCode = block.AgencyCode, CommercialRegistrationNo = block.CommercialRegistrationNo, EnabledSearchByDate = blockModel.EnabledSearchByDate });

            if (supplierBlock != null && supplierBlock.TotalCount > 0)
            {
                if (supplierBlock.Items.FirstOrDefault().BlockStatusId == (int)Enums.BlockStatus.NewAdmin || supplierBlock.Items.FirstOrDefault().BlockStatusId == (int)Enums.BlockStatus.NewSecretary || supplierBlock.Items.FirstOrDefault().BlockStatusId == (int)Enums.BlockStatus.ApprovedSecertary)
                {
                    throw new BusinessRuleException(Resources.BlockResources.Messages.BlockPendingRequest);
                }
                else
                {
                    throw new BusinessRuleException(Resources.BlockResources.ErrorMessages.AlreadyBlocked);
                }
            }
            Check.ArgumentNotNull(nameof(SupplierBlock), block);
            var res = await _genericrepository.CreateAsync(block);

            await _genericrepository.SaveAsync();

            NotificationArguments NotificationArguments = new NotificationArguments
            {
                BodyEmailArgs    = new object[] { blockModel.CommercialSupplierName },
                SubjectEmailArgs = new object[] { },
                PanelArgs        = new object[] { blockModel.CommercialSupplierName },
                SMSArgs          = new object[] { blockModel.CommercialSupplierName }
            };

            if (blockModel.IsSecretaryNotify)
            {
                MainNotificationTemplateModel mainNotificationTemplateModelForManger = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                         $"Block/ManagerBlockDetails?Id={Util.Encrypt(block.SupplierBlockId)}", NotificationEntityType.Block, blockModel.SupplierBlockId.ToString(), 0);
                await _notificationAppService.SendNotificationForUsersByRoleName(NotificationOperations.BlockManager.OperationsToBeApproved.ApproveBlockManager, RoleNames.MonafasatBlackListCommittee, mainNotificationTemplateModelForManger);
            }
            else
            {
                MainNotificationTemplateModel mainNotificationTemplateModelForSecretary = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                            $"Block/SecretaryBlockDetails?Id={Util.Encrypt(block.SupplierBlockId)}", NotificationEntityType.Block, block.SupplierBlockId.ToString(), 0);
                await _notificationAppService.SendNotificationForUsersByRoleName(NotificationOperations.BlockMonafasatAdmin.OperationsRequest.SendRequestBlockFromMonafasatAdminToBlockSecrtary, RoleNames.MonafasatBlockListSecritary, mainNotificationTemplateModelForSecretary);
            }

            return(res);
        }
Пример #2
0
        public async Task <bool> GetTenderOffersForOpening(int id)
        {
            List <Tender> tenders = await _tenderQueries.FindTendersToOpenOffers(0);

            var agencies = await _tenderQueries.FindAgenciesByAgencyCodes(tenders.Select(t => t.AgencyCode).Distinct().ToList());

            int?agencyCategoryId = 0;

            foreach (var tender in tenders)
            {
                agencyCategoryId = agencies.Where(a => a.AgencyCode == tender.AgencyCode).FirstOrDefault().CategoryId;
                NotificationArguments NotificationArguments = new NotificationArguments
                {
                    BodyEmailArgs    = new object[] { tender.OffersOpeningDate.Value.ToShortDateString(), tender.ReferenceNumber },
                    SubjectEmailArgs = new object[] { },
                    PanelArgs        = new object[] { tender.OffersOpeningDate.Value.ToShortDateString(), tender.ReferenceNumber },
                    SMSArgs          = new object[] { tender.OffersOpeningDate.Value.ToShortDateString(), tender.ReferenceNumber }
                };

                MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                $"Tender/OpenTenderOffers?tenderIdString={Util.Encrypt(tender.TenderId)}",
                                                                                                                NotificationEntityType.Tender,
                                                                                                                tender.TenderId.ToString(), null, tender.OffersOpeningCommitteeId);
                await _notificationJobAppService.SendNotifications(NotificationOperations.OffersOppeningSecretary.OperationsOnTheTender.OffersWillOpenTomorrow, tender.AgencyCode, agencyCategoryId.Value, mainNotificationTemplateModel, Enums.UserRole.NewMonafasat_OffersOpeningSecretary.ToString(), (int)tender.OffersOpeningCommitteeId);

                tender.UpdateOfferOpeningNotificationStatus();
                _genericCommandRepository.Update(tender);
            }

            if (tenders.Any())
            {
                await _genericCommandRepository.SaveAsync();
            }
            return(true);
        }
Пример #3
0
        public async Task SendVROTenderOffersTechnicalCheckingToApproveAsync(string tenderIdString)
        {
            int tenderId = Util.Decrypt(tenderIdString);

            Check.ArgumentNotNullOrEmpty(nameof(tenderId), tenderId.ToString());
            Tender tender = await _tenderQueries.FindTenderForOpenCheckStageByTenderId(tenderId);

            IsValidToSendVROTenderOffersTechnicalCheckingToApproveAsync(tender);
            tender.UpdateTenderStatus(Enums.TenderStatus.VROOffersTechnicalCheckingPending, "", _httpContextAccessor.HttpContext.User.UserId(), TenderActions.SendVROTenderOffersTechnicalCheckingToApproveAsync);
            await _tenderCommands.UpdateAsync(tender);

            NotificationArguments NotificationArgument = new NotificationArguments
            {
                BodyEmailArgs    = new object[] { tender.TenderNumber },
                SubjectEmailArgs = new object[] { },
                PanelArgs        = new object[] { tender.TenderNumber },
                SMSArgs          = new object[] { tender.TenderNumber }
            };

            MainNotificationTemplateModel mainNotificationTemplate = new MainNotificationTemplateModel(
                NotificationArgument,
                $"Tender/VROTenderChecking?tenderIdString={Util.Encrypt(tender.TenderId)}",
                NotificationEntityType.Tender,
                tender.TenderId.ToString(),
                null,
                tender.VROCommitteeId);

            await _notificationAppService.SendNotificationForCommitteeUsers(
                NotificationOperations.VROCheckManager.OperationsOnTheTender.sendTechnicalEvaluationOfCompetitionToApprove,
                tender.VROCommitteeId,
                mainNotificationTemplate);
        }
Пример #4
0
        public async Task Approve(int planningId, string verificationCode)
        {
            Check.ArgumentNotNullOrEmpty(nameof(planningId), planningId.ToString());
            PrePlanning planning = await _prePlanningQueries.FindById(planningId);

            if (planning.StatusId != (int)Enums.PrePlanningStatus.Pending)
            {
                throw new UnHandledAccessException();
            }
            await CheckForVerificationCode(planningId, verificationCode, (int)Enums.VerificationType.PrePlanning);

            planning.UpdateStatus(Enums.PrePlanningStatus.Approved, "");
            NotificationArguments NotificationArguments = new NotificationArguments
            {
                BodyEmailArgs    = new object[] { "", planning.ProjectName },
                SubjectEmailArgs = new object[] { },
                PanelArgs        = new object[] { planning.ProjectName },
                SMSArgs          = new object[] { "", planning.ProjectName }
            };
            MainNotificationTemplateModel approveTender = new MainNotificationTemplateModel(NotificationArguments, $"PrePlanning/Details?id={Util.Encrypt(planning.PrePlanningId)}", NotificationEntityType.prePlanning, planning.PrePlanningId.ToString(), planning.BranchId);
            await _notificationAppService.SendNotificationForBranchUsers(NotificationOperations.PrePlaningEmployee.OperationsOnPrePlaning.ApprovePreplaning, planning.BranchId, approveTender);

            _genericCommandRepository.Update <PrePlanning>(planning);
            await _genericCommandRepository.SaveAsync();
        }
Пример #5
0
        public async Task ApproveEdit(int id, string verificationCode)
        {
            await _verification.CheckForVerificationCode(id, verificationCode, (int)Enums.VerificationType.MandatoryList);

            var entity = await _mandatoryListQueries.Find(id);

            var changeRequestEntity = entity.ApproveEdit();
            var updatedEntity       = _mapper.Map <MandatoryList>(changeRequestEntity);

            entity.Update(updatedEntity);

            NotificationArguments NotificationArguments = new NotificationArguments
            {
                BodyEmailArgs    = new object[] { "", entity.DivisionNameAr, entity.DivisionCode },
                SubjectEmailArgs = new object[] { },
                PanelArgs        = new object[] { entity.DivisionNameAr, entity.DivisionCode },
                SMSArgs          = new object[] { entity.DivisionNameAr, entity.DivisionCode }
            };

            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                            $"MandatoryList/Details?id={Util.Encrypt(entity.Id)}",
                                                                                                            NotificationEntityType.MandatoryList,
                                                                                                            entity.Id.ToString());

            await _notificationAppService.SendNotificationForUsersByRoleName(NotificationOperations.MandatoryListOfficer.MandatoryListProducts.ApproveUpdateMandatoryList, RoleNames.MandatoryListOfficer, mainNotificationTemplateModel);

            await _mandatoryListCommands.Update(entity);
        }
Пример #6
0
        public async Task <SupplierBlock> ManagerRejectionReason(int supplierBlockId, string reason)
        {
            var block = FindSupplierBlockById(supplierBlockId);

            block.SetManagerRejectionReason(reason);
            SupplierBlock supplierBlock = await _blockCommands.UpdateAsync(block);

            if (supplierBlock != null)
            {
                NotificationArguments NotificationArguments = new NotificationArguments
                {
                    BodyEmailArgs    = new object[] { block.CommercialRegistrationNo, block.CommercialSupplierName },
                    SubjectEmailArgs = new object[] { },
                    PanelArgs        = new object[] { block.CommercialRegistrationNo, block.CommercialSupplierName },
                    SMSArgs          = new object[] { block.CommercialRegistrationNo, block.CommercialSupplierName }
                };

                MainNotificationTemplateModel mainNotificationTemplateModelForSecretary = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                            $"Block/SecretaryBlockDetails?Id={Util.Encrypt(block.SupplierBlockId)}", NotificationEntityType.Block, block.SupplierBlockId.ToString(), 0);

                MainNotificationTemplateModel mainNotificationTemplateModelForMonafasatAdmin = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                                 $"Block/DetailsAsync?Id={Util.Encrypt(block.SupplierBlockId)}", NotificationEntityType.Block, block.SupplierBlockId.ToString(), 0);


                await _notificationAppService.SendNotificationForUsersByRoleName(NotificationOperations.BlockSecrtary.OperationsToBeApproved.sendRejectBlockToSecretary, RoleNames.MonafasatBlockListSecritary, mainNotificationTemplateModelForSecretary);

                if (!string.IsNullOrEmpty(block.AgencyCode))
                {
                    await _notificationAppService.SendNotificationForUsersByRoleNameAndAgency(NotificationOperations.BlockMonafasatAdmin.OperationsRequest.sendRejectBlockToMonafasatAdmin, RoleNames.MonafasatAdmin, mainNotificationTemplateModelForMonafasatAdmin, block.AgencyCode, block.Agency.CategoryId.Value, null);
                }
            }
            return(supplierBlock);
        }
Пример #7
0
        public async Task Reject(int planningId, string rejectionReason)
        {
            Check.ArgumentNotNullOrEmpty(nameof(planningId), planningId.ToString());
            PrePlanning planning = await _prePlanningQueries.FindById(planningId);

            if (rejectionReason.Length > 500)
            {
                throw new BusinessRuleException("سبب الرفض لا يمكن ان يزيد عن 500 حرف.");
            }
            if (planning.StatusId == (int)Enums.PrePlanningStatus.Approved && planning.IsDeleteRequested)
            {
                planning.SetDeActiveRequest(false);
                planning.SetDeleteRejectionReason(rejectionReason);
            }
            else if (planning.StatusId != (int)Enums.PrePlanningStatus.Pending)
            {
                throw new UnHandledAccessException();
            }
            else
            {
                planning.UpdateStatus(Enums.PrePlanningStatus.Rejected, rejectionReason);
            }
            NotificationArguments NotificationArguments = new NotificationArguments
            {
                BodyEmailArgs    = new object[] { "", planning.ProjectName, },
                SubjectEmailArgs = new object[] { },
                PanelArgs        = new object[] { planning.ProjectName },
                SMSArgs          = new object[] { planning.ProjectName }
            };
            MainNotificationTemplateModel approveTender = new MainNotificationTemplateModel(NotificationArguments, $"PrePlanning/Details?id={Util.Encrypt(planning.PrePlanningId)}", NotificationEntityType.prePlanning, planning.PrePlanningId.ToString(), planning.BranchId);
            await _notificationAppService.SendNotificationForBranchUsers(NotificationOperations.PrePlaningEmployee.OperationsOnPrePlaning.RejectPreplaning, planning.BranchId, approveTender);

            _genericCommandRepository.Update <PrePlanning>(planning);
            await _genericCommandRepository.SaveAsync();
        }
Пример #8
0
        public async Task SendToApproveFromUnitSecretaryLevelTwoToUnitMangerAsync(string tenderIdString)
        {
            int    tenderId = Util.Decrypt(tenderIdString);
            Tender tender   = await _tenderQueries.FindTenderWithUnitHistoryById(tenderId);

            _tenderDomainService.IsValidToSendToApproveFromLevelToByUnitManager(tender);
            TenderUnitStatusesHistory tenderUnitStatusesHistory = new TenderUnitStatusesHistory(comment: "", tenderUnitStatusId: (int)Enums.TenderUnitStatus.WaitingManagerApprove, estimatedValue: tender.EstimatedValue);

            tender.TenderUnitStatusesHistories.Add(tenderUnitStatusesHistory);
            tender.SetUnitStatus(Enums.TenderUnitStatus.WaitingManagerApprove);
            #region [Send Notification]
            NotificationArguments NotificationArguments = new NotificationArguments
            {
                BodyEmailArgs    = new object[] { tender.ReferenceNumber },
                SubjectEmailArgs = new object[] { },
                PanelArgs        = new object[] { tender.ReferenceNumber },
                SMSArgs          = new object[] { tender.ReferenceNumber }
            };
            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                            $"Tender/TenderDetailsForUnitSecretary?tenderIdString={Util.Encrypt(tender.TenderId)}",
                                                                                                            NotificationEntityType.Tender,
                                                                                                            tender.TenderId.ToString(),
                                                                                                            tender.BranchId);
            await _notificationAppService.SendNotificationForCommitteeUsers(NotificationOperations.UnitManager.OperationsOnTheTender.sendToUnitManagerToApprove, null, mainNotificationTemplateModel);

            #endregion
            await _tenderCommands.UpdateAsync(tender);
        }
Пример #9
0
        public async Task RejectTenderByUnitManagerAsync(string tenderIdString, string comment)
        {
            int    tenderId = Util.Decrypt(tenderIdString);
            Tender tender   = await _tenderQueries.FindTenderWithUnitHistoryById(tenderId);

            _tenderDomainService.IsValidToUpdateRejectTenderByUnitManager(tender, comment);
            TenderUnitStatusesHistory tenderUnitStatusesHistory = new TenderUnitStatusesHistory(comment: comment, tenderUnitStatusId: (int)Enums.TenderUnitStatus.RejectedByManager, estimatedValue: tender.EstimatedValue);

            tender.TenderUnitStatusesHistories.Add(tenderUnitStatusesHistory);
            tender.SetUnitStatus(Enums.TenderUnitStatus.RejectedByManager);
            tender.ResetUnitSecretaryAction();
            #region [Send Notification]
            NotificationArguments NotificationArguments = new NotificationArguments
            {
                BodyEmailArgs    = new object[] { tender.ReferenceNumber },
                SubjectEmailArgs = new object[] { },
                PanelArgs        = new object[] { tender.ReferenceNumber },
                SMSArgs          = new object[] { tender.ReferenceNumber }
            };
            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                            $"Tender/TenderDetailsForUnitSecretary?tenderIdString={Util.Encrypt(tender.TenderId)}",
                                                                                                            NotificationEntityType.Tender, tender.TenderId.ToString(), tender.BranchId);
            if (tender.TenderUnitAssigns.OrderByDescending(a => a.TenderUnitAssignId).Last(a => a.IsCurrentlyAssigned).UnitSpecialistLevel == (int)UnitSpecialistLevel.UnitSpecialistLevelOne)
            {
                await _notificationAppService.SendNotificationForCommitteeUsers(NotificationOperations.UnitSecrtaryLevel1.OperationsOnTheTender.rejectTenderFromUnitManager, null, mainNotificationTemplateModel);
            }
            else
            {
                await _notificationAppService.SendNotificationForCommitteeUsers(NotificationOperations.UnitSecrtaryLevel2.OperationsOnTheTender.rejectTenderFromUnitManager, null, mainNotificationTemplateModel);
            }
            #endregion
            await _tenderCommands.UpdateAsync(tender);
        }
Пример #10
0
        public async Task <bool> GetTenderOffersForChecking()
        {
            List <Tender> tenders = await _tenderQueries.FindTendersToCheckOffers();

            foreach (var tender in tenders)
            {
                NotificationArguments NotificationArguments = new NotificationArguments
                {
                    BodyEmailArgs    = new object[] { tender.OffersCheckingDate.Value.ToShortDateString(), tender.ReferenceNumber },
                    SubjectEmailArgs = new object[] { },
                    PanelArgs        = new object[] { tender.OffersCheckingDate.Value.ToShortDateString(), tender.ReferenceNumber },
                    SMSArgs          = new object[] { tender.OffersCheckingDate.Value.ToShortDateString(), tender.ReferenceNumber }
                };

                MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                // $"Tender/OpenTenderOffers/tenderIdString?={Util.Encrypt(tender.TenderId)}",
                                                                                                                $"Tender/OfferChecking/tenderIdString?={Util.Encrypt(tender.TenderId)}",
                                                                                                                NotificationEntityType.Tender,
                                                                                                                tender.TenderId.ToString(), null, tender.DirectPurchaseCommitteeId);
                //to do
                await _notifayAppService.SendNotificationForCommitteeUsers(NotificationOperations.DirectPurchaseManager.OperationsOnTheTender.offersWillCheckingTomorrow, tender.DirectPurchaseCommitteeId, mainNotificationTemplateModel);

                tender.UpdateOfferCheckingNotificationStatus();
            }

            if (tenders.Any())
            {
                await _tenderCommands.UpdateTendersAsync(tenders);
            }

            return(true);
        }
Пример #11
0
        public async Task ShoulSendNotificationByUserIdDirectPurchaseSuccess()
        {
            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel()
            {
                TemplateName   = "templatename",
                BranchId       = 1,
                CommitteeId    = 1,
                Link           = "link",
                RecipientnName = "RecipientnName",
                Args           = new NotificationArguments()
                {
                    BodyEmailArgs = new object[] { "email" }, SMSArgs = new object[] { "sms" }
                }
            };

            MoqUser();
            MockDataForSendNotifications();

            _idmProxy.Setup(i => i.GetEmployeeDetailsByRoleName(It.IsAny <string>()))
            .Returns(() =>
            {
                return(Task.FromResult <List <EmployeeIntegrationModel> >(new BranchDefaults().GetEmployeesData()));
            });

            await _sut.SendNotificationDirectByUserId(1, 1, mainNotificationTemplateModel);

            _notifayCommands.VerifyAll();
        }
Пример #12
0
        public async Task ShoulSendNotificationForBranchUsersSuccess(int branchid)
        {
            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel()
            {
                TemplateName   = "templatename",
                BranchId       = 1,
                CommitteeId    = 1,
                Link           = "link",
                RecipientnName = "RecipientnName",
                Args           = new NotificationArguments()
                {
                    BodyEmailArgs = new object[] { "email" }, SMSArgs = new object[] { "sms" }
                }
            };

            _branchQuery.Setup(m => m.GetAgencyCodeByBranchId(It.IsAny <int>()))
            .Returns(() =>
            {
                return(Task.FromResult <GovAgency>(new AgencyDefaults().GetGovAgency()));
            });


            MockDataForSendNotifications();
            await _sut.SendNotificationForBranchUsers(1, branchid, mainNotificationTemplateModel);

            _notifayCommands.Verify(m => m.SaveChangesAsync(), Times.Once);
        }
Пример #13
0
        public async Task <bool> GetTenderOffersForOpening(int id)
        {
            List <Tender> tenders = await _tenderQueries.FindTendersToOpenOffers(0);

            foreach (var tender in tenders)
            {
                NotificationArguments NotificationArguments = new NotificationArguments
                {
                    BodyEmailArgs    = new object[] { tender.OffersOpeningDate.Value.ToShortDateString(), tender.ReferenceNumber },
                    SubjectEmailArgs = new object[] { },
                    PanelArgs        = new object[] { tender.OffersOpeningDate.Value.ToShortDateString(), tender.ReferenceNumber },
                    SMSArgs          = new object[] { tender.OffersOpeningDate.Value.ToShortDateString(), tender.ReferenceNumber }
                };

                MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                $"Tender/OpenTenderOffers/tenderIdString?={Util.Encrypt(tender.TenderId)}",
                                                                                                                NotificationEntityType.Tender,
                                                                                                                tender.TenderId.ToString(), null, tender.OffersOpeningCommitteeId);
                await _notifayAppService.SendNotificationForCommitteeUsers(NotificationOperations.OffersOppeningSecretary.OperationsOnTheTender.OffersWillOpenTomorrow, tender.OffersOpeningCommitteeId, mainNotificationTemplateModel);

                tender.UpdateOfferOpeningNotificationStatus();
            }

            if (tenders.Count() > 0)
            {
                await _tenderCommands.UpdateTendersAsync(tenders);
            }

            return(true);
        }
Пример #14
0
        public async Task <SupplierBlock> ManagerApproval(int supplierBlockId, string verificationCode)
        {
            bool check = await _verification.CheckForVerificationCode(supplierBlockId, verificationCode, (int)Enums.VerificationType.Block);

            var block = FindSupplierBlockById(supplierBlockId);

            block.SetStatus((int)Enums.BlockStatus.ApprovedManager);
            if (check)
            {
                block.TotallyBlocked();
                NotificationArguments NotificationArguments = new NotificationArguments
                {
                    BodyEmailArgs    = new object[] { block.CommercialRegistrationNo, block.CommercialSupplierName },
                    SubjectEmailArgs = new object[] { },
                    PanelArgs        = new object[] { block.CommercialRegistrationNo, block.CommercialSupplierName },
                    SMSArgs          = new object[] { block.CommercialRegistrationNo, block.CommercialSupplierName }
                };

                NotificationArguments NotificationArgumentsForSupplier = new NotificationArguments
                {
                    BodyEmailArgs    = new object[] { block.CommercialSupplierName, block.ResolutionNumber, block.BlockStartDate.Value.ToShortDateString() },
                    SubjectEmailArgs = new object[] { },
                    PanelArgs        = new object[] { block.CommercialSupplierName, block.ResolutionNumber, block.BlockStartDate.Value.ToShortDateString() },
                    SMSArgs          = new object[] { block.CommercialSupplierName, block.ResolutionNumber, block.BlockStartDate.Value.ToShortDateString() }
                };
                MainNotificationTemplateModel mainNotificationTemplateModelForSecretary = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                            $"Block/SecretaryBlockDetails?Id={Util.Encrypt(block.SupplierBlockId)}", NotificationEntityType.Block, block.SupplierBlockId.ToString(), 0);

                MainNotificationTemplateModel mainNotificationTemplateModelForMonafasatAdmin = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                                 $"Block/DetailsAsync?Id={Util.Encrypt(block.SupplierBlockId)}", NotificationEntityType.Block, block.SupplierBlockId.ToString(), 0);

                MainNotificationTemplateModel mainNotificationTemplateModelForSupplier = new MainNotificationTemplateModel(NotificationArgumentsForSupplier,
                                                                                                                           $"Block/BlockDetailsAsync?Id={Util.Encrypt(block.SupplierBlockId)}", NotificationEntityType.Block, block.SupplierBlockId.ToString(), 0);

                MainNotificationTemplateModel mainNotificationTemplateModelForAccountMangerSpecialist = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                                          $"Block/BlockDetailsAsync?Id={Util.Encrypt(block.SupplierBlockId)}", NotificationEntityType.Block, block.SupplierBlockId.ToString(), 0);

                if (!string.IsNullOrEmpty(block.AgencyCode))
                {
                    await _notificationAppService.SendNotificationForUsersByRoleNameAndAgency(NotificationOperations.BlockManager.OperationsToBeApproved.ApproveBlockFromManagerToMonafasatAdmin, RoleNames.MonafasatAdmin, mainNotificationTemplateModelForMonafasatAdmin, block.AgencyCode, block.Agency.CategoryId.Value, null);

                    await _notificationAppService.SendNotificationForUsersByRoleName(NotificationOperations.BlockManager.OperationsToBeApproved.AppoveBlockFromMangerToAccountMangerSpecialist, RoleNames.AccountsManagementSpecialist, mainNotificationTemplateModelForAccountMangerSpecialist);
                }
                await _notificationAppService.SendNotificationForSuppliers(NotificationOperations.BlockManager.OperationsToBeApproved.sendApprovedManagerApprovedBlocked, new List <string> {
                    block.CommercialRegistrationNo
                }, mainNotificationTemplateModelForSupplier);

                await _notificationAppService.SendNotificationForUsersByRoleName(NotificationOperations.BlockSecrtary.OperationsToBeApproved.ApproveBlockFromManagerToSecretary, RoleNames.MonafasatBlockListSecritary, mainNotificationTemplateModelForSecretary);
            }

            SupplierBlock supplierBlock = await _blockCommands.UpdateAsync(block);

            if (supplierBlock != null)
            {
                await _blockQueries.GetAgencyById(block.AgencyCode);
            }
            return(supplierBlock);
        }
Пример #15
0
        public async Task <bool> GetTenderOffersForChecking()
        {
            List <Tender> tenders = await _tenderQueries.FindTendersToCheckOffers();

            var agencies = await _tenderQueries.FindAgenciesByAgencyCodes(tenders.Select(t => t.AgencyCode).Distinct().ToList());

            int?agencyCategoryId = 0;

            #region New Notification Per User
            var lowBudgetFlowTenders  = tenders.Where(w => w.IsLowBudgetDirectPurchase == true && w.DirectPurchaseCommitteeId == null).ToList();
            var directpurchaseMembers = lowBudgetFlowTenders.Any() ? lowBudgetFlowTenders.Select(d => d.DirectPurchaseMemberId).ToList() : new List <int?>();
            var userProfiles          = await _idmjobqueries.FindUsersProfileByIdAsync(directpurchaseMembers);

            await _notificationJobAppService.AddNotificationSettingByUserId(NotificationOperations.DirectPurchaseMember.OperationsOnTheTender.offersWillCheckingTomorrowPurchaseMember, userProfiles, (int)Enums.UserRole.CR_DirectPurchaseMember);

            #endregion

            foreach (var tender in tenders)
            {
                bool isLowBudgetFlow = tender.IsLowBudgetDirectPurchase.HasValue && tender.IsLowBudgetDirectPurchase.Value == true;
                agencyCategoryId = agencies.FirstOrDefault(a => a.AgencyCode == tender.AgencyCode).CategoryId;
                NotificationArguments NotificationArguments = new NotificationArguments
                {
                    BodyEmailArgs    = new object[] { tender.OffersCheckingDate.Value.ToShortDateString(), tender.ReferenceNumber },
                    SubjectEmailArgs = new object[] { },
                    PanelArgs        = new object[] { tender.OffersCheckingDate.Value.ToShortDateString(), tender.ReferenceNumber },
                    SMSArgs          = new object[] { tender.OffersCheckingDate.Value.ToShortDateString(), tender.ReferenceNumber }
                };

                MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                // $"Tender/OpenTenderOffers/tenderIdString?={Util.Encrypt(tender.TenderId)}",
                                                                                                                $"Tender/CheckDirectPurchaseOffers/tenderIdString?={Util.Encrypt(tender.TenderId)}",
                                                                                                                NotificationEntityType.Tender,
                                                                                                                tender.TenderId.ToString(), null, tender.DirectPurchaseCommitteeId);
                //to do

                if (isLowBudgetFlow)
                {
                    var userprofile = userProfiles.FirstOrDefault(d => d.Id == tender.DirectPurchaseMemberId);
                    await _notificationJobAppService.SendNotificationByUserId(NotificationOperations.DirectPurchaseMember.OperationsOnTheTender.offersWillCheckingTomorrowPurchaseMember, tender.DirectPurchaseMemberId.Value, userprofile.UserName, mainNotificationTemplateModel);
                }
                else
                {
                    await _notificationJobAppService.SendNotifications(NotificationOperations.DirectPurchaseManager.OperationsOnTheTender.offersWillCheckingTomorrow, tender.AgencyCode, agencyCategoryId.Value, mainNotificationTemplateModel, Enums.UserRole.NewMonafasat_ManagerDirtectPurshasingCommittee.ToString(), (int)tender.DirectPurchaseCommitteeId);
                }
                tender.UpdateOfferCheckingNotificationStatus();
                _genericCommandRepository.Update(tender);
            }

            if (tenders.Any())
            {
                await _genericCommandRepository.SaveAsync();
            }

            return(true);
        }
Пример #16
0
        public async Task UpdateAllNegotiationWaitingSupplierResponse()
        {
            var allNegotiations = await _communicationRequestJobQueries.FindAllNegotiationWaitingSupplierResponse();

            foreach (var NEG in allNegotiations)
            {
                var currentSupplier = NEG.NegotiationFirstStageSuppliers.FirstOrDefault(w => w.NegotiationSupplierStatusId == (int)Enums.enNegotiationSupplierStatus.PendeingSupplierReply);
                if (currentSupplier == null || DateTime.Now.Subtract(currentSupplier.PeriodStartDateTime.Value).TotalHours < NEG.SupplierReplyPeriodHours)
                {
                    continue;
                }
                NEG.UpdateSupplierStatus(currentSupplier.Id, (int)Enums.enNegotiationSupplierStatus.NoReply, null);

                var _notInvitedSuppliers = NEG.NegotiationFirstStageSuppliers.Where(w => w.NegotiationSupplierStatusId == (int)Enums.enNegotiationSupplierStatus.NotSent).OrderBy(d => d.Offer.FinalPriceAfterDiscount).ToList();
                var Next = _notInvitedSuppliers.FirstOrDefault();
                if (Next != null)
                {
                    Next.StartSupplierPeriodService();
                    var SuppliersCRs = Next.SupplierCR;
                    var _offer       = await _communicationRequestJobQueries.GetOfferById(Next.OfferId);

                    var _tender = await _communicationRequestJobQueries.FindTenderByTenderId(_offer.TenderId);

                    var _supplier = await _communicationRequestJobQueries.FindSupplierByCRNumber(_offer.CommericalRegisterNo);



                    NotificationArguments NotificationArgumentsforSupplier = new NotificationArguments
                    {
                        BodyEmailArgs    = new object[] { _supplier.SelectedCrName, _tender.TenderName },
                        SubjectEmailArgs = new object[] { },
                        PanelArgs        = new object[] { _supplier.SelectedCrName, _tender.TenderName },
                        SMSArgs          = new object[] { _supplier.SelectedCrName, _tender.TenderName }
                    };

                    MainNotificationTemplateModel mainNotificationTemplateModelforSupplier = new MainNotificationTemplateModel(NotificationArgumentsforSupplier,
                                                                                                                               $"CommunicationRequest/SupplierNegotiation/{Util.Encrypt(_offer.TenderId)}/{Util.Encrypt(NEG.NegotiationId)}",
                                                                                                                               NotificationEntityType.Tender,
                                                                                                                               _offer.TenderId.ToString(), null, _tender.OffersCheckingCommitteeId);

                    _communicationRequestJobQueries.UpdateNegotiationFirstStage(NEG);
                    await _communicationRequestJobQueries.SaveChanges();

                    await _notificationJobAppService.SendNotificationForSuppliers(NotificationOperations.Supplier.AgencyCommunicationRequest.SendNegotiationToSupplier, new List <string> {
                        SuppliersCRs
                    }, mainNotificationTemplateModelforSupplier);
                }
                else
                {
                    NEG.UpdateNegotiationFirstStageStatus((int)Enums.enNegotiationStatus.SupplierNotAgreed, "");
                    _communicationRequestJobQueries.UpdateNegotiationFirstStage(NEG);
                    await _communicationRequestJobQueries.SaveChanges();
                }
            }
        }
Пример #17
0
        private async Task SendNotificationForUsers(QueryResult <EmployeeIntegrationModel> idmUsers, List <UserNotificationSetting> userNotificationSettings, MainNotificationTemplateModel mainNotificationTemplateModel)
        {
            try
            {
                string output = JsonConvert.SerializeObject(mainNotificationTemplateModel);
                MainNotificationTemplateModel mainView = JsonConvert.DeserializeObject <MainNotificationTemplateModel>(output);

                var userNotificationsModel = userNotificationSettings.Select(x => new UserNotificationSettingModel {
                    UserId = x.UserProfileId.Value, Email = idmUsers.Items.Where(i => i.userId == x.User.Id).FirstOrDefault().email, Mobile = idmUsers.Items.Where(i => i.userId == x.User.Id).FirstOrDefault().mobileNumber
                }).ToList();

                var  entityKey             = TempletKey(mainView.EntityValue, mainView.EntityType);
                bool IsNullEmailFirstArrgs = string.IsNullOrEmpty(Convert.ToString(mainView.Args.BodyEmailArgs[0]));
                bool IsNullSmsmFirstArrgs  = string.IsNullOrEmpty(Convert.ToString(mainView.Args.SMSArgs[0]));
                NotificationEmail email;
                NotificationSMS   sms;
                NotificationPanel panel;
                foreach (var setting in userNotificationSettings)
                {
                    if (IsNullEmailFirstArrgs)
                    {
                        mainView.Args.BodyEmailArgs[0] = Convert.ToString(setting.User.FullName);
                    }
                    if (IsNullSmsmFirstArrgs)
                    {
                        mainView.Args.SMSArgs[0] = Convert.ToString(setting.User.FullName);
                    }
                    NotificationDataModel template = await BuildNotificationTemplate(userNotificationSettings.FirstOrDefault().IsArabic, userNotificationSettings.FirstOrDefault().NotificationCodeId, mainView.Args);

                    if (setting.Email)
                    {
                        email = new NotificationEmail(setting.UserProfileId.Value, userNotificationsModel.FirstOrDefault(u => u.UserId == setting.UserProfileId.Value).Email, template.Email.Title, template.Email.Body, setting.Id, mainView.Link, entityKey);
                        await _notifayCommands.AddNotifayWithOutSave(email);
                    }
                    if (setting.Sms)
                    {
                        sms = new NotificationSMS(setting.UserProfileId.Value, userNotificationsModel.FirstOrDefault(u => u.UserId == setting.UserProfileId.Value).Mobile, template.SMS.Body, setting.Id, mainView.Link, entityKey);
                        await _notifayCommands.AddNotifayWithOutSave(sms);
                    }
                    panel = new NotificationPanel(setting.UserProfileId.Value, template.PanelMessage, template.PanelMessage, setting.Id, mainView.Link, mainView.BranchId, mainView.CommitteeId, entityKey);
                    await _notifayCommands.AddNotifayWithOutSave(panel);
                }
                if (userNotificationSettings.Count > 0)
                {
                    await _notifayCommands.SaveChangesAsync();
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.ToString());
            }
        }
Пример #18
0
        public async Task SendNotificationByUserId(int notificationCodeId, int userId, string userName, MainNotificationTemplateModel mainNotificationTemplateModel)
        {
            string output = JsonConvert.SerializeObject(mainNotificationTemplateModel);
            MainNotificationTemplateModel mainView = JsonConvert.DeserializeObject <MainNotificationTemplateModel>(output);
            var userNotificationSetting            = await _iNotificationQuerie.GetNotificationSettingByUserId(notificationCodeId, userId);

            var entityKey = TempletKey(mainView.EntityValue, mainView.EntityType);

            if (userNotificationSetting == null)
            {
                return;
            }
            var userDataFromIDM = await _idmProxy.GetUserbyUserName(userName);

            var userNotificationsModel = new UserNotificationSettingModel
            {
                UserId = userNotificationSetting.UserProfileId.Value,
                Email  = userDataFromIDM != null ? userDataFromIDM.Email : userNotificationSetting.User.Email,
                Mobile = userDataFromIDM != null ? userDataFromIDM.PhoneNumber : userNotificationSetting.User.Mobile,
            };
            bool IsNullEmailFirstArrgs = string.IsNullOrEmpty(Convert.ToString(mainView.Args.BodyEmailArgs[0]));
            bool IsNullSmsmFirstArrgs  = string.IsNullOrEmpty(Convert.ToString(mainView.Args.SMSArgs[0]));

            if (IsNullEmailFirstArrgs)
            {
                mainView.Args.BodyEmailArgs[0] = Convert.ToString(userNotificationSetting.User.FullName);
            }
            if (IsNullSmsmFirstArrgs)
            {
                mainView.Args.SMSArgs[0] = Convert.ToString(userNotificationSetting.User.FullName);
            }
            NotificationDataModel template = await BuildNotificationTemplate(userNotificationSetting.IsArabic, userNotificationSetting.NotificationCodeId, mainView.Args);

            if (userNotificationSetting.Email)
            {
                var email = new NotificationEmail(userId, userNotificationsModel.Email, template.Email.Title, template.Email.Body, userNotificationSetting.Id, mainView.Link, entityKey);
                await _notifayCommands.AddNotifayWithOutSave(email);
            }
            if (userNotificationSetting.Sms)
            {
                var sms = new NotificationSMS(userNotificationSetting.UserProfileId.Value, userNotificationsModel.Mobile, template.SMS.Body, userNotificationSetting.Id, mainView.Link, entityKey);
                await _notifayCommands.AddNotifayWithOutSave(sms);
            }
            var panel = new NotificationPanel(userNotificationSetting.UserProfileId.Value, template.PanelMessage, template.PanelMessage, userNotificationSetting.Id, mainView.Link, mainView.BranchId, mainView.CommitteeId, entityKey);
            await _notifayCommands.AddNotifayWithOutSave(panel);

            await _notifayCommands.SaveChangesAsync();
        }
Пример #19
0
        private async Task SendNotificationAfterDeleteSupplierFromAnnoincementList(DeleteSupplierFromAnnouncementModel deleteModel, AnnouncementSupplierTemplate announcementList)
        {
            var           announcementTemplateIdString = Util.Encrypt(announcementList.AnnouncementId);
            List <string> crs = new List <string> {
                deleteModel.CR
            };
            MainNotificationTemplateModel templateModel;
            NotificationArguments         NotificationArguments = new NotificationArguments();

            NotificationArguments.BodyEmailArgs    = new object[] { announcementList.ReferenceNumber };
            NotificationArguments.SubjectEmailArgs = new object[] { };
            NotificationArguments.PanelArgs        = new object[] { announcementList.ReferenceNumber };
            NotificationArguments.SMSArgs          = new object[] { announcementList.ReferenceNumber };
            templateModel = new MainNotificationTemplateModel(NotificationArguments, $"AnnouncementSuppliersTemplate/AnnouncementSuppliersTemplateDetailsForSuppliers?announcmentIdString={announcementTemplateIdString}", NotificationEntityType.Tender, announcementList.AnnouncementId.ToString(), 0);
            await _notificationAppService.SendNotificationForSuppliers(NotificationOperations.Supplier.OperationsOnTheTender.DeleteSupplierFromAnnouncementList, crs, templateModel);
        }
        private async Task SendNotificationAfterExtendAnnouncementTemplate(ExtendAnnouncementSupplierTemplateModel extendAnnouncement)
        {
            var AcceptedSuppliers = await _announcementQueries.GetAcceptedAnnouncementSuppliers(extendAnnouncement.AnnouncementId);

            if (AcceptedSuppliers.Any())
            {
                MainNotificationTemplateModel mainNotificationTemplateModelForSupplier;
                NotificationArguments         NotificationArguments = new NotificationArguments();
                NotificationArguments.BodyEmailArgs      = new object[] { extendAnnouncement.ReferenceNumber, extendAnnouncement.TemplateExtendMechanism };
                NotificationArguments.SubjectEmailArgs   = new object[] { };
                NotificationArguments.PanelArgs          = new object[] { extendAnnouncement.ReferenceNumber };
                NotificationArguments.SMSArgs            = new object[] { extendAnnouncement.ReferenceNumber };
                mainNotificationTemplateModelForSupplier = new MainNotificationTemplateModel(NotificationArguments, $"AnnouncementSuppliersTemplate/AnnouncementSuppliersTemplateDetailsForSuppliers?announcementIdString={Util.Encrypt(extendAnnouncement.AnnouncementId)}", NotificationEntityType.Announcement, extendAnnouncement.AnnouncementId.ToString(), 0);
                await _notificationAppService.SendNotificationForSuppliers(NotificationOperations.ExtendAnnouncementTemplate.OperationsOnExtendAnnouncement.SendNotificationToAcceptedSuppliers, AcceptedSuppliers, mainNotificationTemplateModelForSupplier);
            }
        }
Пример #21
0
        public async Task ShoulSendNotificationByUserIdSuccess()
        {
            UserAPIModel userAPIModel = new UserAPIModel()
            {
                Email = "*****@*****.**", PhoneNumber = "0505050500"
            };

            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel()
            {
                TemplateName   = "templatename",
                BranchId       = 1,
                CommitteeId    = 1,
                Link           = "link",
                RecipientnName = "RecipientnName",
                Args           = new NotificationArguments()
                {
                    BodyEmailArgs = new object[] { "email" }, SMSArgs = new object[] { "sms" }
                }
            };

            _iNotificationQuerie.Setup(q => q.GetNotificationSettingByUserId(It.IsAny <int>(), It.IsAny <int>()))
            .Returns(() =>
            {
                return(Task.FromResult <UserNotificationSetting>(new NotificationsDefaults().GetUserNotificationSettingWithProfileId()[0]));
            });

            _idmProxy.Setup(q => q.GetUserbyUserName(It.IsAny <string>()))
            .Returns(() =>
            {
                return(Task.FromResult <UserAPIModel>(userAPIModel));
            });

            var entryMock = new Mock <ICacheEntry>();

            _cache.Setup(m => m.CreateEntry(It.IsAny <object>()))
            .Returns(entryMock.Object);

            _iNotificationQuerie.Setup(q => q.FindAllNotificationOperationCode())
            .Returns(() =>
            {
                return(Task.FromResult <List <NotificationOperationCode> >(new NotificationsDefaults().GetNotificationOperationCode()));
            });

            await _sut.SendNotificationByUserId(1, 1, "username", mainNotificationTemplateModel);

            _notifayCommands.Verify(m => m.SaveChangesAsync(), Times.Once);
        }
Пример #22
0
        private async Task SendInvitationsToJoinCommitteeNotification(JoinTechnicalCommitteeModel joinModel, Tender tender)
        {
            var DetailsUrl = _rootConfiguration?.MonafasatURLConfiguration?.MonafasatURL;

            NotificationArguments NotificationArgument = new NotificationArguments();

            NotificationArgument.BodyEmailArgs = new object[] { tender.TenderName, joinModel.CommitteeName, tender.ReferenceNumber, tender?.Agency?.NameArabic, tender?.Branch?.BranchName, tender?.LastEnqueriesDate, tender.LastOfferPresentationDate, tender.OffersOpeningDate, tender.OffersOpeningDate?.Hour, DetailsUrl + $"Tender/Details?STenderId={Util.Encrypt(tender.TenderId)}" };

            NotificationArgument.SubjectEmailArgs = new object[] { };
            NotificationArgument.PanelArgs        = new object[] { tender.ReferenceNumber };
            NotificationArgument.SMSArgs          = new object[] { tender.ReferenceNumber };

            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArgument,
                                                                                                            $"Enquiry/EnquiryDetails?enquiryIdString={Util.Encrypt(joinModel.EnquiryId)}",
                                                                                                            NotificationEntityType.Tender, tender.TenderId.ToString(), 0, joinModel.JoinedCommitteeId);
            await _notificationAppService.SendNotificationForCommitteeUsers(NotificationOperations.TechnicalCommitteeSecretary.InquiriesAboutTender.changetendergatid, joinModel.JoinedCommitteeId, mainNotificationTemplateModel);
        }
Пример #23
0
        private async Task SendNotificationAfterApproveReply(EnquiryReply enquiryReply)
        {
            var           tender = enquiryReply.Enquiry.Tender;
            List <string> crs    = (tender.TenderTypeId == (int)Enums.TenderType.PreQualification || tender.TenderTypeId == (int)Enums.TenderType.PostQualification) ? await _iDMAppService.QualificationToSendInvitation(tender.TenderId) : await _iDMAppService.GetAllSupplierOnTender(tender.TenderId);

            NotificationArguments NotificationArgument = new NotificationArguments();

            if (tender.TenderTypeId == (int)Enums.TenderType.PreQualification || tender.TenderTypeId == (int)Enums.TenderType.PostQualification)
            {
                NotificationArgument.BodyEmailArgs = new object[] { "", tender.TenderName, tender.ReferenceNumber, tender?.LastEnqueriesDate, tender?.LastOfferPresentationDate };
            }
            else
            {
                NotificationArgument.BodyEmailArgs = new object[] { "", tender.TenderName, tender.ReferenceNumber, tender.Purpose, tender?.LastEnqueriesDate, tender?.LastOfferPresentationDate, tender.OffersOpeningDate, tender?.OffersOpeningDate?.Hour };
            }

            NotificationArgument.SubjectEmailArgs = new object[] { };
            NotificationArgument.PanelArgs        = new object[] { tender.ReferenceNumber };
            NotificationArgument.SMSArgs          = new object[] { tender.ReferenceNumber };

            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArgument, $"Enquiry/SupplierEnquiriesOnTender?id={Util.Encrypt(tender.TenderId)}", NotificationEntityType.Tender, tender.TenderId.ToString(), 0, tender.TechnicalOrganizationId);

            if (tender.TenderTypeId == (int)Enums.TenderType.PreQualification || tender.TenderTypeId == (int)Enums.TenderType.PostQualification)
            {
                await _notificationAppService.SendNotificationForSuppliers(NotificationOperations.Supplier.InquiriesAboutTender.publishfaqanswerforQualification, crs, mainNotificationTemplateModel);

                await _notificationAppService.SendNotificationForCommitteeUsers(NotificationOperations.TechnicalCommitteeSecretary.InquiriesAboutTender.PublishfaqanswerforQualification, tender.TechnicalOrganizationId, mainNotificationTemplateModel);
            }
            else
            {
                await _notificationAppService.SendNotificationForSuppliers(NotificationOperations.Supplier.InquiriesAboutTender.publishfaqanswer, crs, mainNotificationTemplateModel);

                await _notificationAppService.SendNotificationForCommitteeUsers(NotificationOperations.TechnicalCommitteeSecretary.InquiriesAboutTender.publishfaqanswerbackend, tender.TechnicalOrganizationId, mainNotificationTemplateModel);
            }

            enquiryReply.Enquiry.Tender.AddActionHistory(tender.TenderStatusId, TenderActions.ApproveFAQ, "", _httpContextAccessor.HttpContext.User.UserId());
            var comunicationRequest = await _enquiryQueries.GetEnquiryReplyWithCommunicationRequest(enquiryReply.EnquiryReplyId);

            AgencyCommunicationRequest agencyCommunicationRequest = await _enquiryDomain.GetEnquiryCommunicationRequestByRequestId(comunicationRequest.Enquiry.AgencyCommunicationRequest.AgencyRequestId);

            if (agencyCommunicationRequest.StatusId == (int)Enums.AgencyCommunicationRequestStatus.PendingEnquiryForReply && enquiryReply.EnquiryReplyStatusId == (int)Enums.EnquiryReplyStatus.Approved)
            {
                agencyCommunicationRequest.UpdateAgencyCommunicationRequestStatus((int)Enums.AgencyCommunicationRequestStatus.ReplyOnEnquiry);
                await _enquiryDomain.UpdateCommunicationRequest(agencyCommunicationRequest);
            }
        }
Пример #24
0
        public async Task SendNotificationDirectByUserId(int notificationCodeId, int userId, MainNotificationTemplateModel mainNotificationTemplateModel)
        {
            string output = JsonConvert.SerializeObject(mainNotificationTemplateModel);
            MainNotificationTemplateModel mainView = JsonConvert.DeserializeObject <MainNotificationTemplateModel>(output);
            var userNotificationSetting            = await _iNotificationQuerie.GetNotificationSettingByUserId(notificationCodeId, userId);

            if (userNotificationSetting == null)
            {
                return;
            }
            var role     = _httpContextAccessor.HttpContext.User.UserRole();
            var idmUsers = await _idmProxy.GetEmployeeDetailsByRoleName(role);

            var userDataFromIDM        = idmUsers.FirstOrDefault(s => s.userId == userId);
            var userNotificationsModel = new UserNotificationSettingModel
            {
                UserId = userNotificationSetting.UserProfileId.Value,
                Email  = userDataFromIDM != null ? userDataFromIDM.email : userNotificationSetting.User.Email,
                Mobile = userDataFromIDM != null ? userDataFromIDM.mobileNumber : userNotificationSetting.User.Mobile,
            };
            bool IsNullEmailFirstArrgs = string.IsNullOrEmpty(Convert.ToString(mainView.Args.BodyEmailArgs[0]));
            bool IsNullSmsmFirstArrgs  = string.IsNullOrEmpty(Convert.ToString(mainView.Args.SMSArgs[0]));

            if (IsNullEmailFirstArrgs)
            {
                mainView.Args.BodyEmailArgs[0] = Convert.ToString(userNotificationSetting.User.FullName);
            }
            if (IsNullSmsmFirstArrgs)
            {
                mainView.Args.SMSArgs[0] = Convert.ToString(userNotificationSetting.User.FullName);
            }
            NotificationDataModel template = await BuildNotificationTemplate(userNotificationSetting.IsArabic, userNotificationSetting.NotificationCodeId, mainView.Args);

            if (userNotificationSetting.Email)
            {
                await SendOneEmail(new EmailModel { Body = template.Email.Body, Subject = template.Email.Title, To = new List <string> {
                                                        userNotificationsModel.Email
                                                    } });
            }
            if (userNotificationSetting.Sms)
            {
                await SendOneSms(new SmsModel { Body = template.SMS.Body, To = new List <string> {
                                                    userNotificationsModel.Mobile
                                                } });
            }
        }
        public async Task <AnnouncementTemplateMainDetailsModel> SendJoinRequestToAnnouncment(AnnouncementTemplateMainDetailsModel announcementModel)
        {
            var model        = new AnnouncementTemplateMainDetailsModel();
            var announcement = await _announcementQueries.GetAnnouncementWithJoinRequestsById(announcementModel.AnnouncementId);

            string cr = _httpContextAccessor.HttpContext.User.SupplierNumber();

            await IsValidToAddJoinRequestToAnnouncementTemplate(announcement, cr);

            List <AnnouncementTemplateJoinRequestAttachment> attachments = new List <AnnouncementTemplateJoinRequestAttachment>();

            if (announcementModel.Attachments.Count > 0)
            {
                foreach (var item in announcementModel.Attachments)
                {
                    attachments.Add(new AnnouncementTemplateJoinRequestAttachment(item.Name, item.FileNetReferenceId));
                }
            }
            announcement = announcement.AddJoinRequest(attachments, announcement.AnnouncementId, cr);

            MainNotificationTemplateModel mainNotificationTemplateModelForSupplier;
            NotificationArguments         NotificationArguments = new NotificationArguments();

            NotificationArguments.BodyEmailArgs    = new object[] { announcement.ReferenceNumber };
            NotificationArguments.SubjectEmailArgs = new object[] { };
            NotificationArguments.PanelArgs        = new object[] { announcement.ReferenceNumber };
            NotificationArguments.SMSArgs          = new object[] { announcement.ReferenceNumber };

            UserProfile userProfile = await _iDMQueries.FindUserProfileByIdAsync(announcement.CreatedById.Value);

            var branchid = userProfile.BranchUsers.Where(u => u.UserRoleId == (int)Enums.UserRole.NewMonafasat_DataEntry || u.UserRoleId == (int)Enums.UserRole.NewMonafasat_Auditer).FirstOrDefault().BranchId;

            mainNotificationTemplateModelForSupplier = new MainNotificationTemplateModel(NotificationArguments,
                                                                                         $"AnnouncementSuppliersTemplate/AnnouncementSuppliersTemplateJoinRequestsDetails?AnnouncementId={Util.Encrypt(announcementModel.AnnouncementId)}",
                                                                                         NotificationEntityType.Tender,
                                                                                         announcement.AnnouncementId.ToString(),
                                                                                         branchid);
            await _notificationAppService.SendNotificationForBranchUsers(NotificationOperations.DataEntry.OperationsOnTheTender.ReciveJoinRequest, branchid, mainNotificationTemplateModelForSupplier);

            await _notificationAppService.SendNotificationForBranchUsers(NotificationOperations.Auditor.OperationsOnTheTender.ReciveJoinRequest, branchid, mainNotificationTemplateModelForSupplier);

            await _announcementCommands.UpdateAnnouncementSupplierTemplateAsync(announcement);

            return(model);
        }
Пример #26
0
        public async Task SendTenderByUnitSecretaryForModificationAsync(ReturnTenderToDataEntryFromUnitFormodificationsModel returnTenderToDataEntryFromUnitFormodificationsModel)
        {
            var    tenderId = Util.Decrypt(returnTenderToDataEntryFromUnitFormodificationsModel.tenderIdString);
            Tender tender   = await _tenderQueries.FindTenderWithUnitHistoryById(tenderId);

            _tenderDomainService.IsValidToReturnTenderToDataEntryForEdit(tender);
            tender.DeactiveAllAssingments();
            tender.SetUnitStatus(Enums.TenderUnitStatus.ReturnedToAgencyForEdit);
            tender.DeleteUnitModificationAttachments();
            TenderUnitStatusesHistory tenderUnitStatusesHistory = new TenderUnitStatusesHistory(comment: returnTenderToDataEntryFromUnitFormodificationsModel.notes, tenderUnitStatusId: (int)Enums.TenderUnitStatus.ReturnedToAgencyForEdit, updateTypeId: returnTenderToDataEntryFromUnitFormodificationsModel.modificationTypeId, estimatedValue: tender.EstimatedValue);

            tender.TenderUnitStatusesHistories.Add(tenderUnitStatusesHistory);
            tender.UpdateTenderStatus(Enums.TenderStatus.ReturnedFromUnitToAgencyForEdit,
                                      returnTenderToDataEntryFromUnitFormodificationsModel.notes,
                                      _httpContextAccessor.HttpContext.User.UserId(),
                                      TenderActions.SendTenderByUnitSecretaryForModification);
            List <TenderAttachment> tenderAttachments = new List <TenderAttachment>();

            foreach (var file in returnTenderToDataEntryFromUnitFormodificationsModel.files)
            {
                tenderAttachments.Add(new TenderAttachment(file.Name, file.FileNetReferenceId, (int)Enums.AttachmentType.UnitModificationsAttachmentsToDataEntry));
            }
            tender.Attachments.AddRange(tenderAttachments);
            #region [Send Notification]
            NotificationArguments NotificationArguments = new NotificationArguments
            {
                BodyEmailArgs    = new object[] { tender.ReferenceNumber },
                SubjectEmailArgs = new object[] { },
                PanelArgs        = new object[] { tender.ReferenceNumber },
                SMSArgs          = new object[] { tender.ReferenceNumber }
            };
            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                            $"Tender/Details?STenderId={Util.Encrypt(tender.TenderId)}",
                                                                                                            NotificationEntityType.Tender,
                                                                                                            tender.TenderId.ToString(),
                                                                                                            tender.BranchId);

            await _notificationAppService.SendNotificationForBranchUsers(NotificationOperations.Auditor.OperationsOnTheTender.editTenderFromUnit, tender.BranchId, mainNotificationTemplateModel);

            await _notificationAppService.SendNotificationForBranchUsers(NotificationOperations.DataEntry.OperationsOnTheTender.editTenderFromUnit, tender.BranchId, mainNotificationTemplateModel);

            #endregion
            _genericCommandRepository.Update(tender);
            await _genericCommandRepository.SaveAsync();
        }
Пример #27
0
        public async Task UpdateAllSecondNegotiationWaitingSupplierResponse()
        {
            var allNegotiations = await _communicationRequestJobQueries.FindAllSecondNegotiationWaitingSupplierResponse();

            var agencies = await _communicationRequestJobQueries.FindAgenciesByAgencyCodes(allNegotiations.Select(d => d.AgencyCommunicationRequest.Tender.AgencyCode).Distinct().ToList());

            int?agencyCategoryId = 0;

            foreach (var NEG in allNegotiations)
            {
                agencyCategoryId = agencies.Where(a => a.AgencyCode == NEG.AgencyCommunicationRequest.Tender.AgencyCode).FirstOrDefault().CategoryId;

                NEG.UpdateNegotiationStatus((int)Enums.enNegotiationStatus.SupplierNotAgreed);

                #region [Send Approval To Agency]
                int?   committeId = NEG.AgencyCommunicationRequest.Tender.OffersCheckingCommitteeId;
                string userRole   = Enums.UserRole.NewMonafasat_OffersCheckSecretary.ToString();
                int    codeId     = NotificationOperations.OffersCheckSecretary.AgencyCommunicationRequest.RecectSecondNegotiationSupplier;
                if (NEG.AgencyCommunicationRequest.Tender.TenderTypeId == (int)Enums.TenderType.CurrentDirectPurchase || NEG.AgencyCommunicationRequest.Tender.TenderTypeId == (int)Enums.TenderType.NewDirectPurchase)
                {
                    committeId = NEG.AgencyCommunicationRequest.Tender.DirectPurchaseCommitteeId;
                    userRole   = Enums.UserRole.NewMonafasat_SecretaryDirtectPurshasingCommittee.ToString();
                    codeId     = NotificationOperations.DirectPurchaseSecretary.AgencyCommunicationRequest.RecectSecondNegotiationSupplier;
                }
                await _communicationRequestJobQueries.UpdateNegotiationAsync(NEG);

                NotificationArguments NotificationArguments = new NotificationArguments
                {
                    BodyEmailArgs    = new object[] { "", NEG.AgencyCommunicationRequest.Tender.ReferenceNumber },
                    SubjectEmailArgs = new object[] { },
                    PanelArgs        = new object[] { "", NEG.AgencyCommunicationRequest.Tender.ReferenceNumber },
                    SMSArgs          = new object[] { "", NEG.AgencyCommunicationRequest.Tender.ReferenceNumber }
                };

                MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(NotificationArguments,
                                                                                                                $"CommunicationRequest/CreateSecondNegotiationRequestAsync/{Util.Encrypt(NEG.NegotiationId)}",
                                                                                                                NotificationEntityType.Tender,
                                                                                                                NEG.AgencyCommunicationRequest.Tender.TenderId.ToString(), NEG.AgencyCommunicationRequest.Tender.BranchId, committeId);
                await _notificationJobAppService.SendNotifications(codeId, NEG.AgencyCommunicationRequest.Tender.AgencyCode, agencyCategoryId.Value, mainNotificationTemplateModel, userRole, committeId.Value, 0);

                #endregion
                await _communicationRequestJobQueries.UpdateNegotiationSecondStageAsync(NEG);
            }
            await _communicationRequestJobQueries.SaveChanges();
        }
        private async Task SendNotificationAfterApproveAnnouncementCancel(AnnouncementSuppliersTemplateCancelModel cancelModel)
        {
            var JoinedSuppliers = await _announcementQueries.GetJoinedAnnouncementSuppliers(cancelModel.AnnouncementId);

            var AcceptedSuppliers = await _announcementQueries.GetAcceptedAnnouncementSuppliers(cancelModel.AnnouncementId);

            MainNotificationTemplateModel mainNotificationTemplateModelForSupplier;
            NotificationArguments         NotificationArguments = new NotificationArguments();

            NotificationArguments.BodyEmailArgs      = new object[] { cancelModel.ReferenceNumber };
            NotificationArguments.SubjectEmailArgs   = new object[] { };
            NotificationArguments.PanelArgs          = new object[] { cancelModel.ReferenceNumber };
            NotificationArguments.SMSArgs            = new object[] { cancelModel.ReferenceNumber };
            mainNotificationTemplateModelForSupplier = new MainNotificationTemplateModel(NotificationArguments, $"AnnouncementSuppliersTemplate/CancelAnnouncementSuppliersTemplate?announcementIdString={Util.Encrypt(cancelModel.AnnouncementId)}", NotificationEntityType.Announcement, cancelModel.AnnouncementId.ToString(), 0);
            await _notificationAppService.SendNotificationForSuppliers(NotificationOperations.CancelAnnouncementTemplate.OperationsToBeApproved.sendApprovedCancelAnnouncementTemplate, AcceptedSuppliers, mainNotificationTemplateModelForSupplier);

            await _notificationAppService.SendNotificationForSuppliers(NotificationOperations.CancelAnnouncementTemplate.OperationsToBeApproved.AcceptJoinedSupplierAnnouncementTemplate, JoinedSuppliers, mainNotificationTemplateModelForSupplier);
        }
Пример #29
0
        public async Task ShoulNotSendNotificationByUserIdDirectPurchaseSucess()
        {
            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel()
            {
                TemplateName   = "templatename",
                BranchId       = 1,
                CommitteeId    = 1,
                Link           = "link",
                RecipientnName = "RecipientnName",
                Args           = new NotificationArguments()
                {
                    BodyEmailArgs = new object[] { "email" }, SMSArgs = new object[] { "sms" }
                }
            };
            await _sut.SendNotificationDirectByUserId(1, 1, mainNotificationTemplateModel);

            _notifayCommands.VerifyAll();
        }
Пример #30
0
        public async Task RejectApproveAnnouncementNotification(Announcement announcement)
        {
            NotificationArguments notificationArguments = new NotificationArguments
            {
                BodyEmailArgs    = new object[] { announcement.ReferenceNumber },
                SubjectEmailArgs = new object[] { },
                PanelArgs        = new object[] { announcement.ReferenceNumber },
                SMSArgs          = new object[] { announcement.ReferenceNumber }
            };

            MainNotificationTemplateModel mainNotificationTemplateModel = new MainNotificationTemplateModel(notificationArguments,
                                                                                                            $"Announcement/GetAnnouncementDetails?AnnouncementIdString={Util.Encrypt(announcement.AnnouncementId)}",
                                                                                                            NotificationEntityType.Announcement,
                                                                                                            announcement.AnnouncementId.ToString(),
                                                                                                            announcement.BranchId);

            await _notificationAppService.SendNotificationForBranchUsers(NotificationOperations.DataEntry.AnnouncementOperations.RejectApproveAnnouncement, announcement.BranchId.Value, mainNotificationTemplateModel);
        }