@@ -43,6 +43,7 @@ public interface IReportingManager
4343 Task < Result < List < MerchantOperator > > > GetMerchantOperators ( MerchantQueries . GetMerchantOperatorsQuery request , CancellationToken cancellationToken ) ;
4444 Task < Result < List < MerchantContract > > > GetMerchantContracts ( MerchantQueries . GetMerchantContractsQuery request , CancellationToken cancellationToken ) ;
4545 Task < Result < List < MerchantDevice > > > GetMerchantDevices ( MerchantQueries . GetMerchantDevicesQuery request , CancellationToken cancellationToken ) ;
46+ Task < Result < List < MerchantOpeningHour > > > GetMerchantOpeningHours ( MerchantQueries . GetMerchantOpeningHoursQuery request , CancellationToken cancellationToken ) ;
4647 Task < Result < Operator > > GetOperator ( OperatorQueries . GetOperatorQuery request , CancellationToken cancellationToken ) ;
4748 Task < Result < TransactionDetailReportResponse > > GetTransactionDetailReport ( TransactionQueries . TransactionDetailReportQuery request ,
4849 CancellationToken cancellationToken ) ;
@@ -58,6 +59,9 @@ Task<Result<List<TodaysSalesByHour>>> GetTodaysSalesByHour(TransactionQueries.To
5859 Task < Result < TodaysSettlement > > GetTodaysSettlement ( SettlementQueries . TodaysSettlementQuery request ,
5960 CancellationToken cancellationToken ) ;
6061 #endregion
62+
63+ Task < Result < MerchantScheduleResponse > > GetMerchantSchedule ( MerchantQueries . GetMerchantScheduleQuery request ,
64+ CancellationToken cancellationToken ) ;
6165}
6266
6367public class ReportingManager : IReportingManager {
@@ -625,6 +629,47 @@ public async Task<Result<List<Operator>>> GetOperators(OperatorQueries.GetOperat
625629 return Result . Success ( operators ) ;
626630 }
627631
632+ public async Task < Result < List < MerchantOpeningHour > > > GetMerchantOpeningHours ( MerchantQueries . GetMerchantOpeningHoursQuery request ,
633+ CancellationToken cancellationToken ) {
634+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , request . EstateId . ToString ( ) ) ;
635+ await using EstateManagementContext context = resolvedContext . Context ;
636+
637+ var openingHoursQuery = ( from mo in context . MerchantOpeningHours
638+ where mo . MerchantId == request . MerchantId
639+ select new {
640+ SundayOpen = mo . SundayOpening ,
641+ SundayClose = mo . SundayClosing ,
642+ MondayOpen = mo . MondayOpening ,
643+ MondayClose = mo . MondayClosing ,
644+ TuesdayOpen = mo . TuesdayOpening ,
645+ TuesdayClose = mo . TuesdayClosing ,
646+ WednesdayOpen = mo . WednesdayOpening ,
647+ WednesdayClose = mo . WednesdayClosing ,
648+ ThursdayOpen = mo . ThursdayOpening ,
649+ ThursdayClose = mo . ThursdayClosing ,
650+ FridayOpen = mo . FridayOpening ,
651+ FridayClose = mo . FridayClosing ,
652+ SaturdayOpen = mo . SaturdayOpening ,
653+ SaturdayClose = mo . SaturdayClosing ,
654+ } ) ;
655+
656+ var openingHoursResult = await ExecuteQuerySafeSingleOrDefault ( openingHoursQuery , cancellationToken , "Error retrieving merchant opening hours" ) ;
657+
658+ if ( openingHoursResult . IsFailed )
659+ return ResultHelpers . CreateFailure ( openingHoursResult ) ;
660+
661+ List < MerchantOpeningHour > openingHours = new List < MerchantOpeningHour > ( ) ;
662+ openingHours . Add ( new MerchantOpeningHour { OpeningTime = openingHoursResult . Data . SundayOpen , ClosingTime = openingHoursResult . Data . SundayClose , DayOfWeek = DayOfWeek . Sunday , MerchantId = request . MerchantId } ) ;
663+ openingHours . Add ( new MerchantOpeningHour { OpeningTime = openingHoursResult . Data . MondayOpen , ClosingTime = openingHoursResult . Data . MondayClose , DayOfWeek = DayOfWeek . Monday , MerchantId = request . MerchantId } ) ;
664+ openingHours . Add ( new MerchantOpeningHour { OpeningTime = openingHoursResult . Data . TuesdayOpen , ClosingTime = openingHoursResult . Data . TuesdayClose , DayOfWeek = DayOfWeek . Tuesday , MerchantId = request . MerchantId } ) ;
665+ openingHours . Add ( new MerchantOpeningHour { OpeningTime = openingHoursResult . Data . WednesdayOpen , ClosingTime = openingHoursResult . Data . WednesdayClose , DayOfWeek = DayOfWeek . Wednesday , MerchantId = request . MerchantId } ) ;
666+ openingHours . Add ( new MerchantOpeningHour { OpeningTime = openingHoursResult . Data . ThursdayOpen , ClosingTime = openingHoursResult . Data . ThursdayClose , DayOfWeek = DayOfWeek . Thursday , MerchantId = request . MerchantId } ) ;
667+ openingHours . Add ( new MerchantOpeningHour { OpeningTime = openingHoursResult . Data . FridayOpen , ClosingTime = openingHoursResult . Data . FridayClose , DayOfWeek = DayOfWeek . Friday , MerchantId = request . MerchantId } ) ;
668+ openingHours . Add ( new MerchantOpeningHour { OpeningTime = openingHoursResult . Data . SaturdayOpen , ClosingTime = openingHoursResult . Data . SaturdayClose , DayOfWeek = DayOfWeek . Saturday , MerchantId = request . MerchantId } ) ;
669+
670+ return Result . Success ( openingHours ) ;
671+ }
672+
628673 public async Task < Result < Operator > > GetOperator ( OperatorQueries . GetOperatorQuery request ,
629674 CancellationToken cancellationToken ) {
630675 using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , request . EstateId . ToString ( ) ) ;
@@ -966,16 +1011,19 @@ public async Task<Result<Merchant>> GetMerchant(MerchantQueries.GetMerchantQuery
9661011 using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , request . EstateId . ToString ( ) ) ;
9671012 await using EstateManagementContext context = resolvedContext . Context ;
9681013
969- var merchantQuery = BuildMerchantQuery ( context , request . MerchantId ) ;
970- var merchantQueryResult = await ExecuteQuerySafeSingleOrDefault ( merchantQuery , cancellationToken , "Error getting merchant" ) ;
1014+ IQueryable < MerchantData > merchantQuery = BuildMerchantQuery ( context , request . MerchantId ) ;
1015+ Result < MerchantData > merchantQueryResult = await ExecuteQuerySafeSingleOrDefault ( merchantQuery , cancellationToken , "Error getting merchant" ) ;
9711016 if ( merchantQueryResult . IsFailed ) {
9721017 return ResultHelpers . CreateFailure ( merchantQueryResult ) ;
9731018 }
9741019
975- var merchantStateQueryResult = await ExecuteQuerySafeSingleOrDefault ( context . MerchantBalanceProjectionState . Where ( ms => ms . MerchantId == request . MerchantId ) , cancellationToken , "Error getting merchant state" ) ;
1020+ Result < List < MerchantOpeningHours > > openingHoursQueryResult = await ExecuteQuerySafeToList ( context . MerchantOpeningHours . Where ( m => m . MerchantId == request . MerchantId ) , cancellationToken , "Error getting merchant opening hours" ) ;
1021+ if ( openingHoursQueryResult . IsFailed ) return ResultHelpers . CreateFailure ( openingHoursQueryResult ) ;
1022+
1023+ Result < MerchantBalanceProjectionState > merchantStateQueryResult = await ExecuteQuerySafeSingleOrDefault ( context . MerchantBalanceProjectionState . Where ( ms => ms . MerchantId == request . MerchantId ) , cancellationToken , "Error getting merchant state" ) ;
9761024 if ( merchantStateQueryResult . IsFailed ) return ResultHelpers . CreateFailure ( merchantStateQueryResult ) ;
9771025
978- return Result . Success ( ModelFactory . ConvertFrom ( merchantQueryResult . Data , merchantStateQueryResult . Data . Balance ) ) ;
1026+ return Result . Success ( ModelFactory . ConvertFrom ( merchantQueryResult . Data , merchantStateQueryResult . Data . Balance , openingHoursQueryResult . Data ) ) ;
9791027 }
9801028
9811029 private static IQueryable < MerchantData > BuildMerchantQuery ( EstateManagementContext context ,
@@ -1303,8 +1351,47 @@ public async Task<Result<TodaysSettlement>> GetTodaysSettlement(SettlementQuerie
13031351 return response ;
13041352 }
13051353
1306- private async Task < DatabaseProjections . SettlementGroupProjection > GetSettlementSummary ( IQueryable < DatabaseProjections . ComparisonSettlementTransactionProjection > query ,
1307- CancellationToken cancellationToken ) {
1354+ public async Task < Result < MerchantScheduleResponse > > GetMerchantSchedule ( MerchantQueries . GetMerchantScheduleQuery request ,
1355+ CancellationToken cancellationToken ) {
1356+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , request . EstateId . ToString ( ) ) ;
1357+ await using EstateManagementContext context = resolvedContext . Context ;
1358+
1359+ var merchantScheduleQuery = from s in context . MerchantSchedules
1360+ join d in context . MerchantScheduleMonths on s . MerchantScheduleId equals d . MerchantScheduleId
1361+ where s . MerchantId == request . MerchantId && s . Year == request . Year
1362+ select new {
1363+ s . MerchantId ,
1364+ s . MerchantScheduleId ,
1365+ s . Year ,
1366+ d . Month ,
1367+ d . ClosedDays
1368+ } ;
1369+
1370+ var merchantScheduleQueryResult = await ExecuteQuerySafeToList ( merchantScheduleQuery , cancellationToken , "Error getting merchant schedule" ) ;
1371+ if ( merchantScheduleQueryResult . IsFailed )
1372+ return ResultHelpers . CreateFailure ( merchantScheduleQueryResult ) ;
1373+
1374+ MerchantScheduleResponse response = new MerchantScheduleResponse ( ) ;
1375+ foreach ( var item in merchantScheduleQueryResult . Data ) {
1376+
1377+ List < Int32 > closedDaysList = item . ClosedDays
1378+ . Split ( ',' , StringSplitOptions . RemoveEmptyEntries )
1379+ . Select ( s => int . TryParse ( s , out var n ) ? n : ( int ? ) null )
1380+ . Where ( n => n . HasValue )
1381+ . Select ( n => n . Value )
1382+ . ToList ( ) ;
1383+
1384+ MerchantScheduleMonthResponse ? monthSchedule = new ( ) { ClosedDays = closedDaysList , Month = item . Month } ;
1385+
1386+ response . Months . Add ( monthSchedule ) ;
1387+ }
1388+ response . Year = request . Year ;
1389+
1390+ return response ;
1391+ }
1392+
1393+ private async Task < DatabaseProjections . SettlementGroupProjection > GetSettlementSummary ( IQueryable < DatabaseProjections . ComparisonSettlementTransactionProjection > query ,
1394+ CancellationToken cancellationToken ) {
13081395 // Get the settleed fees summary
13091396 DatabaseProjections . SettlementGroupProjection summary = await BuildSettlementSummaryQuery ( query ) . SingleOrDefaultAsync ( cancellationToken ) ;
13101397
0 commit comments