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;
}
}
}