Skip to content

Commit

Permalink
VM-1540: registration request notification
Browse files Browse the repository at this point in the history
  • Loading branch information
vladimir-buravlev committed Feb 6, 2025
1 parent 37fe775 commit 09bed2e
Show file tree
Hide file tree
Showing 12 changed files with 135 additions and 77 deletions.
Empty file.

This file was deleted.

Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using VirtoCommerce.Platform.Core.PushNotifications;

namespace VirtoCommerce.MarketplaceRegistrationModule.Core.PushNotifications;
public class RegistrationRequestPushNotification : PushNotification
{
public RegistrationRequestPushNotification(string creator)
: base(creator)
{
}

public string RegistrationRequestId { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
namespace VirtoCommerce.MarketplaceRegistrationModule.Core.Services;
public interface IRegistrationRequestService
{
Task<RegistrationRequest> CreateRegistrationRequest(RegistrationRequestDetails registrationRequestDetails);
Task<RegistrationRequest> CreateRegistrationRequest(RegistrationRequest registrationRequest);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,7 @@
<PackageReference Include="VirtoCommerce.Platform.Core" Version="3.875.0" />
<PackageReference Include="VirtoCommerce.MarketplaceVendorModule.Core" Version="3.827.0-alpha.839" />
</ItemGroup>
<ItemGroup>
<Folder Include="Events\" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using FluentValidation;
using VirtoCommerce.MarketplaceRegistrationModule.Core.Models;
using VirtoCommerce.MarketplaceRegistrationModule.Core.Services;
using VirtoCommerce.MarketplaceRegistrationModule.Data.Validators;
using VirtoCommerce.MarketplaceVendorModule.Core.Common;

namespace VirtoCommerce.MarketplaceRegistrationModule.Data.Commands;
public class CreateRegistrationRequestCommandHandler : ICommandHandler<CreateRegistrationRequestCommand, RegistrationRequest>
{
private readonly IRegistrationRequestService _registrationRequestService;
private readonly RegistrationRequestValidatorBase _registrationRequestValidator;

public CreateRegistrationRequestCommandHandler(
IRegistrationRequestService registrationRequestService
IRegistrationRequestService registrationRequestService,
RegistrationRequestValidatorBase registrationRequestValidator
)
{
_registrationRequestService = registrationRequestService;
_registrationRequestValidator = registrationRequestValidator;
}

public virtual async Task<RegistrationRequest> Handle(CreateRegistrationRequestCommand request, CancellationToken cancellationToken)
Expand All @@ -24,14 +29,16 @@ public virtual async Task<RegistrationRequest> Handle(CreateRegistrationRequestC
throw new ArgumentNullException(nameof(request));
}

var details = ExType<RegistrationRequestDetails>.New();
details.FirstName = request.FirstName;
details.LastName = request.LastName;
details.OrganizationName = request.OrganizationName;
details.ContactEmail = request.ContactEmail;
details.ContactPhone = request.ContactPhone;
var registrationRequest = ExType<RegistrationRequest>.New();
registrationRequest.FirstName = request.FirstName;
registrationRequest.LastName = request.LastName;
registrationRequest.OrganizationName = request.OrganizationName;
registrationRequest.ContactEmail = request.ContactEmail;
registrationRequest.ContactPhone = request.ContactPhone;

var result = await _registrationRequestService.CreateRegistrationRequest(details);
await _registrationRequestValidator.ValidateAndThrowAsync(registrationRequest, cancellationToken);

var result = await _registrationRequestService.CreateRegistrationRequest(registrationRequest);

return result;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,38 +1,41 @@
using System;
using System.Threading.Tasks;
using VirtoCommerce.MarketplaceRegistrationModule.Core;
using Microsoft.Extensions.Options;
using VirtoCommerce.MarketplaceRegistrationModule.Core.Models;
using VirtoCommerce.MarketplaceRegistrationModule.Core.PushNotifications;
using VirtoCommerce.MarketplaceRegistrationModule.Core.Services;
using VirtoCommerce.MarketplaceVendorModule.Core.Common;
using VirtoCommerce.MarketplaceVendorModule.Core;
using VirtoCommerce.MarketplaceVendorModule.StateMachine.Services;
using VirtoCommerce.Platform.Core.PushNotifications;
using ModuleConstants = VirtoCommerce.MarketplaceRegistrationModule.Core.ModuleConstants;

namespace VirtoCommerce.MarketplaceRegistrationModule.Data.Services;
public class RegistrationRequestService : IRegistrationRequestService
{
private readonly IRegistrationRequestCrudService _registrationRequestCrudService;
private readonly IStateMachineDefinitionService _stateMachineDefinitionService;
private readonly IStateMachineInstanceService _stateMachineInstanceService;
private readonly IPushNotificationManager _pushNotificationManager;
private readonly MarketplaceOptions _options;

public RegistrationRequestService(
IRegistrationRequestCrudService registrationRequestCrudService,
IStateMachineDefinitionService stateMachineDefinitionService,
IStateMachineInstanceService stateMachineInstanceService
IStateMachineInstanceService stateMachineInstanceService,
IPushNotificationManager pushNotificationManager,
IOptions<MarketplaceOptions> options
)
{
_registrationRequestCrudService = registrationRequestCrudService;
_stateMachineDefinitionService = stateMachineDefinitionService;
_stateMachineInstanceService = stateMachineInstanceService;
_pushNotificationManager = pushNotificationManager;
_options = options.Value;
}

public virtual async Task<RegistrationRequest> CreateRegistrationRequest(RegistrationRequestDetails registrationRequestDetails)
public virtual async Task<RegistrationRequest> CreateRegistrationRequest(RegistrationRequest registrationRequest)
{
var registrationRequest = ExType<RegistrationRequest>.New();
registrationRequest.Id = Guid.NewGuid().ToString();
registrationRequest.FirstName = registrationRequestDetails.FirstName;
registrationRequest.LastName = registrationRequestDetails.LastName;
registrationRequest.OrganizationName = registrationRequestDetails.OrganizationName;
registrationRequest.ContactEmail = registrationRequestDetails.ContactEmail;
registrationRequest.ContactPhone = registrationRequestDetails.ContactPhone;

//Create state machine instance for registration request
var customerOrderStateMachineDefinition = await _stateMachineDefinitionService.GetActiveStateMachineDefinitionAsync(ModuleConstants.StateMachineObjectType.RegistrationRequest);
Expand All @@ -44,6 +47,21 @@ public virtual async Task<RegistrationRequest> CreateRegistrationRequest(Registr

await _registrationRequestCrudService.SaveChangesAsync([registrationRequest]);

await PublishNotification(registrationRequest);

return registrationRequest;
}

protected virtual async Task PublishNotification(RegistrationRequest registrationRequest)
{
var pushNotificationRecipient = _options.OperatorGroupId;
var pushNotification = new RegistrationRequestPushNotification(pushNotificationRecipient)
{
Title = "You’ve received a new Vendor registration request",
Description = "Click the notification to open it",
RegistrationRequestId = registrationRequest.Id,
};

await _pushNotificationManager.SendAsync(pushNotification);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@ angular.module('virtoCommerce.marketplaceRegistrationModule')
.controller('virtoCommerce.marketplaceRegistrationModule.regisrationRequestDetailsController',
['$scope',
'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi',
'platformWebApp.metaFormsService',
'virtoCommerce.marketplaceModule.stateMachineRegistrar',
function ($scope,
bladeNavigationService, marketplaceApi,
metaFormsService,
stateMachineRegistrar) {
var blade = $scope.blade;
blade.headIcon = 'fa fa-address-card';
Expand All @@ -23,13 +21,10 @@ angular.module('virtoCommerce.marketplaceRegistrationModule')

blade.refresh = function (parentRefresh) {
blade.isLoading = true;
blade.metaFields = [];

if (parentRefresh) {
blade.parentBlade.refresh(true);
}
var registrationRequestTemplate = metaFormsService.getMetaFields('RegistrationRequest');
blade.metaFields = registrationRequestTemplate;

if (blade.currentEntity) {
blade.stateMachineInstance = null;
Expand All @@ -45,7 +40,11 @@ angular.module('virtoCommerce.marketplaceRegistrationModule')
});

}
};
};

blade.close = function () {
$scope.bladeClose();
}

function fillTollbarCommands() {
blade.toolbarCommands = [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ angular.module('virtoCommerce.marketplaceRegistrationModule')
.controller('virtoCommerce.marketplaceRegistrationModule.registrationRequestListController',
['$scope', '$localStorage',
'platformWebApp.bladeUtils', 'platformWebApp.bladeNavigationService',
'platformWebApp.metaFormsService',
'virtoCommerce.marketplaceRegistrationModule.webApi',
'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension',
function ($scope, $localStorage,
bladeUtils, bladeNavigationService,
metaFormsService,
registrationApi,
uiGridHelper, gridOptionExtension) {
$scope.uiGridConstants = uiGridHelper.uiGridConstants;
Expand All @@ -15,6 +17,13 @@ angular.module('virtoCommerce.marketplaceRegistrationModule')
blade.title = 'marketplaceRegistration.blades.registration-request-list.title';
$scope.hasMore = true;

// notification
var notificationRegistrationRequestId = undefined;
if (blade.notification) {
notificationRegistrationRequestId = blade.notification.registrationRequestId;
blade.notification = null;
}

// filtering
var filter = blade.filter = $scope.filter = {};
$scope.$localStorage = $localStorage;
Expand All @@ -24,22 +33,7 @@ angular.module('virtoCommerce.marketplaceRegistrationModule')
name: 'marketplaceRegistration.blades.registration-request-list.filters.add-new'
}];
}
//var activeRequestsFilter = $localStorage.registrationRequestFilters.find(x => x.id =='active-requests');
//if (!activeRequestsFilter) {
// $localStorage.registrationRequestFilters.unshift({
// id: 'active-requests',
// name: 'marketplaceRegistration.blades.registration-request-list.filters.active-requests',
// statuses: getActiveStatuses()
// });
//}
//var finalizedRequestsFilter = $localStorage.registrationRequestFilters.find(x => x.id == 'finalized-requests');
//if (!finalizedRequestsFilter) {
// $localStorage.registrationRequestFilters.unshift({
// id: 'finalized-requests',
// name: 'marketplaceRegistration.blades.registration-request-list.filters.finalized-requests',
// statuses: getFinalizedStatuses()
// });
//}

if ($localStorage.registrationRequestFilterId) {
filter.current = $localStorage.registrationRequestFilters.find(x => x.id == $localStorage.registrationRequestFilterId);
}
Expand Down Expand Up @@ -68,9 +62,15 @@ angular.module('virtoCommerce.marketplaceRegistrationModule')

if (data.results) {
$scope.listEntries = data.results;
if (notificationRegistrationRequestId) {
$scope.selectedNodeId = notificationRegistrationRequestId;
}
if ($scope.selectedNodeId) {
blade.selectedItem = $scope.listEntries.find(x => x.id === $scope.selectedNodeId);
}
if (notificationRegistrationRequestId) {
$scope.showDetails(blade.selectedItem)
}
}

$scope.pageSettings.totalItems = data.totalCount;
Expand All @@ -97,16 +97,6 @@ angular.module('virtoCommerce.marketplaceRegistrationModule')
return true;
}
}
//{
// name: "marketplaceCommunication.blades.conversation-list.commands.new-chat",
// icon: 'fas fa-plus',
// executeMethod: function () {
// $scope.startNew();
// },
// canExecuteMethod: function () {
// return true;
// }
//}
];

var setSelectedItem = function (listItem) {
Expand All @@ -121,11 +111,13 @@ angular.module('virtoCommerce.marketplaceRegistrationModule')
}

$scope.showDetails = function (listItem) {
var registrationRequestTemplate = metaFormsService.getMetaFields('RegistrationRequest');
var newBlade = {
id: 'registrationRequest',
currentEntity: listItem,
controller: 'virtoCommerce.marketplaceRegistrationModule.regisrationRequestDetailsController',
template: 'Modules/$(VirtoCommerce.MarketplaceRegistration)/Scripts/blades/registration-request-details.tpl.html',
metaFields: registrationRequestTemplate,
};
blade.childBlade = newBlade;
bladeNavigationService.showBlade(newBlade, blade);
Expand Down Expand Up @@ -166,14 +158,6 @@ angular.module('virtoCommerce.marketplaceRegistrationModule')
bladeNavigationService.showBlade(newBlade, blade);
}

//async function getActiveStatuses() {
// return (await registrationApi.allStates()).filter(x => !x.isFinal).map(x => x.name);
//}

//async function getFinalizedStatuses() {
// return (await registrationApi.allStates()).filter(x => x.isFinal).map(x => x.name);
//}

function getSearchCriteria() {
var searchCriteria = {
//sort: uiGridHelper.getSortExpression($scope),
Expand Down
Loading

0 comments on commit 09bed2e

Please sign in to comment.