using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Core.Interfaces; using gehGassi.Domain.Common; using gehGassi.Domain.Payment; using gehGassi.Domain.Shop; using Microsoft.EntityFrameworkCore; namespace gehGassi.Core.Services { /// /// Service der die Verwaltung von Transaktionsgebühren ermöglichts /// public class TransactionFeeService : ServiceBase, ITransactionFeeService { private readonly IRepository _gehGassiRepository; /// /// Erstellt eine Instanz /// /// Instanz eines IUnitOfWork public TransactionFeeService(IUnitOfWork unitOfWork) : base(unitOfWork) { _gehGassiRepository = unitOfWork.GetRepository(); } /// /// Gibt eine gefilterte Liste von Transaktionsgebühren zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Transaktionsgebühren public IQueryable Filter(string filter) { return Repository.Query(c => c.PayInType != null && c.Deleted == false); } /// /// Erstellen einer Tranksaktionsgebühr /// /// Tranksaktionsgebühr public TransactionFee Create() { var item = new TransactionFee() { Id = Guid.NewGuid().ToString("N") }; return item; } /// /// Prüft ob schon eine Einstellung für einen Typ vorhanden ist /// /// Zahlungsmethode /// true wenn bereits vorhanden, false sonst public async Task ExistsAsync(PayInType payInType) { var item = await Repository.FirstOrDefaultAsync(c => c.PayInType == payInType && c.Deleted == false).ConfigureAwait(false); return item != null; } /// /// Gibt eine Liste von Transaktionsgebühren zurück, die für die Synchronisation benötigt werden /// /// Letztes Update oder null wenn noch keines /// Liste von Transaktionsgebühren public async Task> GetForSyncAsync(DateTimeOffset? lastUpdate) { if (lastUpdate.HasValue) { return (await Repository.FindAsync(c => c.UpdatedAt > lastUpdate.Value).ConfigureAwait(false)).ToList(); } else { return (await Repository.GetAllAsync().ConfigureAwait(false)).ToList(); } } /// /// Gibt eine gefilterte Liste von GehGassi-Gebühren zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener GehGassi-Gebühren public IQueryable FilterGehGassiFees(string filter) { return _gehGassiRepository.Query(c => c.Id != "" && c.Deleted == false); } /// /// Erstellen einer GehGassi-Gebühr /// /// GehGassi-Gebühr public GehGassiFee CreateGehGassiFee() { var item = new GehGassiFee() { Id = Guid.NewGuid().ToString("N") }; return item; } /// /// Gibt eine GehGassi-Gebühr zurück /// /// Id der Gebühr /// Gebühr oder null, wenn nicht gefunden public async Task GetGehGassiFeeAsync(string id) { return await _gehGassiRepository.FirstOrDefaultAsync(c => c.Id == id).ConfigureAwait(false); } /// /// Prüft ob schon eine Einstellung für einen Startbetrag vorhanden ist /// /// Startbetrag /// ID die ignoriert werden soll /// true wenn bereits vorhanden, false sonst public async Task ExistsGehGassiFeeAsync(decimal startAmmount, string ignoreId) { var item = await _gehGassiRepository.FirstOrDefaultAsync(c => c.StartAmmount == startAmmount && c.Deleted == false && c.Id != ignoreId).ConfigureAwait(false); return item != null; } /// /// Hinzufügen einer GehGassi-Gebühr /// /// GehGassi-Gebühr public void AddGehGassiFee(GehGassiFee gehGassiFee) { _gehGassiRepository.Add(gehGassiFee); } /// /// Löschen einer GehGassi-Gebühr /// /// GehGassi-Gebühr public void RemoveGehGassiFee(GehGassiFee gehGassiFee) { _gehGassiRepository.Remove(gehGassiFee); } /// /// Gibt eine GehGassi-Gebühr zurück die für den Startbetrag gilt /// /// Start-Betrag /// Gebühr oder null, wenn nicht gefunden public async Task GetMinGehGassiFeeAsync(decimal startAmmount) { var fee = await (_gehGassiRepository.Query(c => c.StartAmmount <= startAmmount && c.Deleted == false).OrderByDescending(c => c.StartAmmount)).FirstOrDefaultAsync().ConfigureAwait(false); return fee; } } }