예제 #1
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);
        }
예제 #2
0
        /// <summary>
        /// Set sound attribute.
        /// </summary>
        /// <param name="arguments">Notification arguments object.</param>
        /// <param name="toastXml">XML object used to add the sound attribute to.</param>
        private static void SetSoundAttribute(NotificationArguments arguments, XmlDocument toastXml)
        {
            var audio = toastXml.GetElementsByTagName("audio").FirstOrDefault();

            if (audio == null)
            {
                audio = toastXml.CreateElement("audio");
                var toastNode = ((XmlElement)toastXml.SelectSingleNode("/toast"));

                if (toastNode != null)
                {
                    toastNode.AppendChild(audio);
                }
            }

            string sound;

            if (string.IsNullOrWhiteSpace(arguments.WindowsSound))
            {
                sound = "file:///" + arguments.SoundPath;
            }
            else
            {
                sound = $"ms-winsoundevent:{arguments.WindowsSound}";
            }

            var attribute = toastXml.CreateAttribute("src");

            attribute.Value = sound;
            audio.Attributes.SetNamedItem(attribute);

            attribute       = toastXml.CreateAttribute("loop");
            attribute.Value = arguments.Loop;
        }
예제 #3
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);
        }
예제 #4
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);
        }
예제 #5
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);
        }
예제 #6
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();
        }
예제 #7
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);
        }
예제 #8
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();
        }
예제 #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 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);
        }
예제 #11
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);
        }
예제 #12
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);
        }
예제 #13
0
 /// <summary>
 /// Send notification.
 /// </summary>
 /// <param name="arguments">Notification arguments object.</param>
 private static void SendNotification(NotificationArguments arguments)
 {
     //if (arguments.ApplicationId == Globals.DefaultApplicationId)
     //{
     //	ShortcutHelper.CreateShortcutIfNeeded(arguments.ApplicationId, arguments.ApplicationName);
     //}
     var toast = Notifier.ShowToast(arguments);
 }
예제 #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();
                }
            }
        }
        public MainNotificationTemplateModel ReturnMainNotificationTemplateModel()
        {
            NotificationArguments NotificationArguments = new NotificationArguments
            {
                BodyEmailArgs    = new object[] { "", "", "" },
                SubjectEmailArgs = new object[] { },
                PanelArgs        = new object[] { "" },
                SMSArgs          = new object[] { "" }
            };

            return(new MainNotificationTemplateModel(NotificationArguments, "", NotificationEntityType.Tender, "", 1));
        }
예제 #18
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);
            }
        }
예제 #20
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);
        }
예제 #21
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);
            }
        }
        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);
        }
예제 #23
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();
        }
예제 #24
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);
        }
예제 #26
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);
        }
예제 #27
0
        public async Task SendToLevelTwoFromUnitSecretaryLevelOneAsync(string tenderIdString, string userName, string notes)
        {
            var    tenderId = Util.Decrypt(tenderIdString);
            Tender tender   = await _tenderQueries.FindTenderWithUnitHistoryById(tenderId);

            _tenderDomainService.IsValidToSendToLevelTwoFromUnitSecretaryLevelOne(tender, userName);
            var user = await _iDMAppService.FindUserProfileByUserNameAsync(userName);

            if (user == null)
            {
                Enums.UserRole userType = (Enums.UserRole)Enum.Parse(typeof(Enums.UserRole), RoleNames.UnitSpecialistLevel2, true);
                user = await _iDMAppService.GetUserProfileByEmployeeId(userName, null, userType);

                Check.ArgumentNotNull(nameof(user), user);
                await _genericCommandRepository.CreateAsync(user);
            }
            TenderUnitAssign tenderUnitAssign = new TenderUnitAssign(user.Id, tenderId, true, (int)UnitSpecialistLevel.UnitSpecialistLevelTwo);

            tender.SetUnitStatus(Enums.TenderUnitStatus.TenderTransferdToLevelTwo);
            TenderUnitStatusesHistory tenderUnitStatusesHistory = new TenderUnitStatusesHistory(comment: notes, tenderUnitStatusId: (int)Enums.TenderUnitStatus.TenderTransferdToLevelTwo, estimatedValue: tender.EstimatedValue);

            tender.TenderUnitStatusesHistories.Add(tenderUnitStatusesHistory);
            #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.UnitSecrtaryLevel2.OperationsOnTheTender.reviewTender, null, mainNotificationTemplateModel);

            #endregion
            await _tenderCommands.UpdateAsync(tender);

            await _genericCommandRepository.CreateAsync(tenderUnitAssign);

            await _genericCommandRepository.SaveAsync();
        }
        public async Task <AnnouncementTemplateMainDetailsModel> AnnouncementFinalApprove(AnnouncementFinalApprovalModel approvalModel)
        {
            var announcementId = Util.Decrypt(approvalModel.AnnouncementTemplateIdString);

            if (approvalModel.VerificationCode == null)
            {
                throw new BusinessRuleException(Resources.TenderResources.ErrorMessages.ExpiredActivationCode);
            }
            var verified = await _announcementDomainService.CheckVerificationCode(announcementId, approvalModel.VerificationCode, (int)Enums.VerificationType.Announcement);


            var model = new AnnouncementTemplateMainDetailsModel();

            if (verified)
            {
                var announcementTemplate = await _announcementQueries.GetAnnouncementWithJoinRequestsById(announcementId);

                List <KeyValuePair <string, int> > ModifiedCrs = new List <KeyValuePair <string, int> >();

                if (approvalModel.SuppliersIdsString.Count > 0)
                {
                    List <int> suppliersIds = approvalModel.SuppliersIdsString.Select(r => Util.Decrypt(r)).ToList();
                    foreach (var request in announcementTemplate.AnnouncementJoinRequests.Where(r => suppliersIds.Contains(r.Id)))
                    {
                        ChangeRequestsStatus(request, ModifiedCrs);
                    }
                }
                await _announcementCommands.UpdateAnnouncementSupplierTemplateAsync(announcementTemplate);

                MainNotificationTemplateModel mainNotificationTemplateModelForSupplier;
                NotificationArguments         NotificationArguments = new NotificationArguments();
                NotificationArguments.BodyEmailArgs      = new object[] { announcementTemplate.ReferenceNumber };
                NotificationArguments.SubjectEmailArgs   = new object[] { };
                NotificationArguments.PanelArgs          = new object[] { announcementTemplate.ReferenceNumber };
                NotificationArguments.SMSArgs            = new object[] { announcementTemplate.ReferenceNumber };
                mainNotificationTemplateModelForSupplier = new MainNotificationTemplateModel(NotificationArguments, $"AnnouncementSuppliersTemplate/AnnouncementSuppliersTemplateDetailsForSuppliers?announcmentIdString={approvalModel.AnnouncementTemplateIdString}", NotificationEntityType.Tender, announcementId.ToString(), 0);
                await _notificationAppService.SendNotificationForSuppliers(NotificationOperations.Supplier.OperationsOnTheTender.AcceptAnnouncementJoinRequest, ModifiedCrs.Where(cr => cr.Value == (int)Enums.AnnouncementTemplateJoinRequestStatus.Accepted).Select(cr => cr.Key).ToList(), mainNotificationTemplateModelForSupplier);

                await _notificationAppService.SendNotificationForSuppliers(NotificationOperations.Supplier.OperationsOnTheTender.RejectAnnouncementJoinRequest, ModifiedCrs.Where(cr => cr.Value == (int)Enums.AnnouncementTemplateJoinRequestStatus.Rejected).Select(cr => cr.Key).ToList(), mainNotificationTemplateModelForSupplier);
            }
            return(model);
        }
예제 #29
0
        private async Task SendNotificationFinishStoppingPeroiod(Tender tender, int?agencyCategoryId)
        {
            NotificationArguments NotificationArgument = new NotificationArguments
            {
                BodyEmailArgs = new object[] { "", tender.ReferenceNumber, tender.Purpose, tender.LastEnqueriesDate.Value.ToString("dd/MM/yyyy"), tender.LastOfferPresentationDate.Value.ToString("dd/MM/yyyy"), tender.OffersOpeningDate == null ? Resources.SharedResources.DisplayInputs.NotFound : tender.OffersOpeningDate?.ToString("dd/MM/yyyy"), tender.OffersOpeningDate == null ? Resources.SharedResources.DisplayInputs.NotFound : tender.OffersOpeningDate?.ToString("hh:mm tt") },
                PanelArgs     = new object[] { tender.ReferenceNumber },
                SMSArgs       = new object[] { tender.ReferenceNumber }
            };
            MainNotificationTemplateModel StopPeriod = new MainNotificationTemplateModel(NotificationArgument, $"Tender/Details?STenderId={Util.Encrypt(tender.TenderId)}", NotificationEntityType.Tender, tender.TenderId.ToString(), 0, tender.OffersCheckingCommitteeId);
            MainNotificationTemplateModel StopPeriodDirectPurchase = new MainNotificationTemplateModel(NotificationArgument, $"Tender/Details?STenderId={Util.Encrypt(tender.TenderId)}", NotificationEntityType.Tender, tender.TenderId.ToString(), 0, tender.DirectPurchaseCommitteeId);

            if (tender.TenderTypeId == (int)Enums.TenderType.NewDirectPurchase)
            {
                await _notificationJobAppService.SendNotifications(NotificationOperations.DirectPurchaseSecretary.OperationsOnTheTender.FinishStoppingPeriod, tender.AgencyCode, agencyCategoryId.Value, StopPeriodDirectPurchase, Enums.UserRole.NewMonafasat_SecretaryDirtectPurshasingCommittee.ToString(), (int)tender.DirectPurchaseCommitteeId);
            }
            else
            {
                await _notificationJobAppService.SendNotifications(NotificationOperations.OffersCheckSecretary.OperationsOnTheTender.FinishStoppingPeriod, tender.AgencyCode, agencyCategoryId.Value, StopPeriod, Enums.UserRole.NewMonafasat_OffersCheckSecretary.ToString(), (int)tender.OffersCheckingCommitteeId);
            }
        }
예제 #30
0
        public async Task FindTendersWithPlaintsAfterStoppingPeriodJob()
        {
            List <AgencyCommunicationRequest> agencyCommunications = await _communicationRequestJobQueries.FindTendersWithPlaintsAfterStoppingPeriodJob();

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

            int?agencyCategoryId = 0;

            foreach (var request in agencyCommunications)
            {
                if (request.PlaintNotification == null)
                {
                    continue;
                }
                PlaintRequestNotification obj = request.PlaintNotification;
                obj.Update(true);
                _genericCommandRepository.Update(obj);
                await _genericCommandRepository.SaveAsync();

                agencyCategoryId = agencies.Where(a => a.AgencyCode == request.Tender.AgencyCode).FirstOrDefault().CategoryId;

                NotificationArguments NotificationArguments = new NotificationArguments
                {
                    BodyEmailArgs    = new object[] { "", request.PlaintAcceptanceStatus.Name, request.Tender.ReferenceNumber },
                    SubjectEmailArgs = new object[] { },
                    PanelArgs        = new object[] { request.Tender.ReferenceNumber },
                    SMSArgs          = new object[] { request.Tender.ReferenceNumber }
                };
                MainNotificationTemplateModel approveTender = new MainNotificationTemplateModel(NotificationArguments, $"Tender/Details?STenderId{Util.Encrypt(request.Tender.TenderId)}", NotificationEntityType.Tender, request.Tender.TenderId.ToString(), request.Tender.BranchId);

                if (request.Tender.TenderTypeId == (int)Enums.TenderType.NewDirectPurchase)
                {
                    await _notificationJobAppService.SendNotifications(NotificationOperations.DirectPurchaseSecretary.AgencyCommunicationRequest.PlaintStoppingPeriodEnd, request.Tender.AgencyCode, agencyCategoryId.Value, approveTender, Enums.UserRole.NewMonafasat_SecretaryDirtectPurshasingCommittee.ToString(), (int)request.Tender.DirectPurchaseCommitteeId);
                }
                else
                {
                    await _notificationJobAppService.SendNotifications(NotificationOperations.OffersCheckSecretary.AgencyCommunicationRequest.PlaintStoppingPeriodEnd, request.Tender.AgencyCode, agencyCategoryId.Value, approveTender, Enums.UserRole.NewMonafasat_OffersCheckSecretary.ToString(), (int)request.Tender.OffersCheckingCommitteeId);
                }
            }
        }