74 lines
2.6 KiB
C#
74 lines
2.6 KiB
C#
using System.Globalization;
|
|
using Drab.Core.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Pcm.Db;
|
|
using Pcm.Db.Enums;
|
|
|
|
namespace Drab.Logic.Services;
|
|
|
|
public class OrdersStore : IOrdersStore, IDisposable
|
|
{
|
|
private readonly ILogger<OrdersStore> _logger;
|
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
|
private readonly IDrabSettings _drabSettings;
|
|
|
|
public OrdersStore(ILogger<OrdersStore> logger, IServiceScopeFactory serviceScopeFactory, IDrabSettings drabSettings)
|
|
{
|
|
_serviceScopeFactory = serviceScopeFactory;
|
|
_drabSettings = drabSettings;
|
|
_logger = logger;
|
|
}
|
|
|
|
public async Task<Result<List<DokDto>, string>> FetchOrders()
|
|
{
|
|
_logger.LogInformation("Fetch new orders");
|
|
|
|
var now = DateTime.Now;
|
|
var fallbackDate = now - TimeSpan.FromDays(30);
|
|
DateTime date;
|
|
|
|
try
|
|
{
|
|
var parsed = DateTime.ParseExact(_drabSettings.IgnoreOrdersBefore, "yyyy-MM-dd", CultureInfo.InvariantCulture);
|
|
date = (now - parsed).TotalDays > 30 ? fallbackDate : parsed;
|
|
}
|
|
catch
|
|
{
|
|
_logger.LogWarning("IgnoreOrdersBefore is invalid, falling back to last 30 days.");
|
|
date = fallbackDate;
|
|
}
|
|
|
|
using var scope = _serviceScopeFactory.CreateScope();
|
|
await using var dbContext = scope.ServiceProvider.GetService<PcmDbContext>();
|
|
try
|
|
{
|
|
var orders = await dbContext.Dokumenty
|
|
.Where(x => x.Aktywny == 1
|
|
&& x.TypDok == (short)TypDok.RejestracjaZamowieniaOdOdbiorcy
|
|
&& x.Opcja1 == 0
|
|
&& x.Data >= date)
|
|
.Include(x => x.DokKontr)
|
|
.ThenInclude(x => x.Kontr)
|
|
.Include(x => x.TekstDoks.Where(y =>
|
|
y.Znaczenie == (short)TekstDokZnaczenie.InfoDoZamowienia ||
|
|
y.Znaczenie == (short)TekstDokZnaczenie.TekstDod2))
|
|
.Include(x => x.PozDoks)
|
|
.ThenInclude(x => x.TekstPozs.Where(y => y.Znaczenie == 0 || y.Znaczenie == 13))
|
|
.Include(x => x.PozDoks)
|
|
.ThenInclude(x => x.Tow)
|
|
.ThenInclude(x => x.Jm)
|
|
.ToListAsync();
|
|
|
|
return Result.Ok<List<DokDto>, string>(orders.Select(x => x.ToDokDto()).ToList());
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
_logger.LogError(e, "Error on fetching orders");
|
|
return Result.Failed<List<DokDto>, string>(e.Message);
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
}
|
|
} |