159 lines
6.0 KiB
C#
159 lines
6.0 KiB
C#
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.Customers;
|
|
|
|
namespace gehGassi.Core.Services
|
|
{
|
|
/// <summary>
|
|
/// Service der die Verwaltung von Kunden realisiert
|
|
/// </summary>
|
|
public class CustomerService : ServiceBase<Customer>, ICustomerService
|
|
{
|
|
private readonly IRepository<CustomerWithNames> _customerWithNamesRepository;
|
|
|
|
public CustomerService(IUnitOfWork unitOfWork) : base(unitOfWork)
|
|
{
|
|
_customerWithNamesRepository = unitOfWork.GetRepository<CustomerWithNames>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine gefilterte Liste von Kunden zurück
|
|
/// </summary>
|
|
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
|
|
/// <returns>List betroffener Kunden</returns>
|
|
public IQueryable<Customer> Filter(string filter)
|
|
{
|
|
return Repository.Query(c => c.Name.Contains(filter) || c.Number.Contains(filter) || c.Comment.Contains(filter));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Erstellen eines Kunden
|
|
/// </summary>
|
|
/// <returns>Kunde</returns>
|
|
public Customer Create()
|
|
{
|
|
var item = new Customer
|
|
{
|
|
Contact = new Contact(),
|
|
Address = new Address(),
|
|
UniqueId = Guid.NewGuid()
|
|
};
|
|
return item;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine gefilterte Liste von Kunden zurück. Sucht nur im Namen
|
|
/// </summary>
|
|
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
|
|
/// <returns>List betroffener Kunden</returns>
|
|
public async Task<List<Customer>> SearchAsync(string filter)
|
|
{
|
|
return (await Repository.FindAsync(c => c.Name.Contains(filter))).ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine gefilterte Liste von Kunden zurück die ein Mangopay Konto haben. Sucht nur im Namen
|
|
/// </summary>
|
|
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
|
|
/// <returns>List betroffener Kunden</returns>
|
|
public async Task<List<Customer>> SearchWithMangopayAccountAsync(string filter)
|
|
{
|
|
return (await Repository.FindAsync(c => c.Name.Contains(filter) && c.MangopayIdCreated)).ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt ein Kunden zurück
|
|
/// </summary>
|
|
/// <param name="uniqueId">UniqueId des Kunden</param>
|
|
/// <returns>Betroffener Kunde</returns>
|
|
public async Task<Customer> GetByUniqueIdAsync(Guid uniqueId)
|
|
{
|
|
return await Repository.FirstOrDefaultAsync(c => c.UniqueId == uniqueId).ConfigureAwait(false);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine gefilterte Liste von Kunden mit Namen zurück
|
|
/// </summary>
|
|
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="fallback">Fallback Sprache</param>
|
|
/// <returns>List betroffener Kunden</returns>
|
|
public IQueryable<CustomerWithNames> FilterWithNames(string filter, string language, string fallback)
|
|
{
|
|
language = language.ToUpperInvariant();
|
|
fallback = fallback.ToUpperInvariant();
|
|
|
|
var baseQuery = _customerWithNamesRepository.QueryStoredProcedure("SELECT * FROM tv_CustomersWithNames({0},{1})", c => c.Name.Contains(filter) || c.Number.Contains(filter), language, fallback);
|
|
return baseQuery;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt die nächste freie Nummer für einen Kunden zurück
|
|
/// </summary>
|
|
/// <returns>Kunden-Nummer</returns>
|
|
public string GetNextNumber()
|
|
{
|
|
long number = 1;
|
|
var last = Repository.Query(c => c.Id != -1).OrderByDescending(c => c.Id).FirstOrDefault();
|
|
if (last != null)
|
|
number = last.Id + 1;
|
|
return $"K-{DateTime.UtcNow.Year:0000}{DateTime.UtcNow.Month:00}-{number:00000}";
|
|
}
|
|
|
|
/// <summary>
|
|
/// Zurücksetzen des Kunden-Typs auf null
|
|
/// </summary>
|
|
/// <param name="typeId">Id des Kunden-Typs</param>
|
|
/// <returns>Anzahl zurückgesetzte Kunden</returns>
|
|
public async Task<int> ResetTypeAsync(long typeId)
|
|
{
|
|
var items = (await Repository.FindAsync(c => c.TypeId == typeId).ConfigureAwait(false)).ToList();
|
|
foreach (var item in items)
|
|
{
|
|
item.TypeId = null;
|
|
}
|
|
|
|
return items.Count;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Zurücksetzen der Branche auf null
|
|
/// </summary>
|
|
/// <param name="branchId">Id der Branche</param>
|
|
/// <returns>Anzahl zurückgesetzte Kunden</returns>
|
|
public async Task<int> ResetBranchAsync(string branchId)
|
|
{
|
|
var items = (await Repository.FindAsync(c => c.BranchId == branchId).ConfigureAwait(false)).ToList();
|
|
foreach (var item in items)
|
|
{
|
|
item.TypeId = null;
|
|
}
|
|
|
|
return items.Count;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Zurücksetzen der Branchen-Listungen
|
|
/// </summary>
|
|
/// <param name="branchId">Id der Branche</param>
|
|
/// <returns>Anzahl zurückgesetzte Kunden</returns>
|
|
public async Task<int> ResetBranchListingsAsync(string branchId)
|
|
{
|
|
var items = (await Repository.FindAsync(c => c.BranchesJson.Contains(branchId)).ConfigureAwait(false)).ToList();
|
|
foreach (var customer in items)
|
|
{
|
|
var branches = customer.BranchesJson.Split(',').ToList();
|
|
branches.Remove(branchId);
|
|
customer.BranchesJson = string.Join(',', branches);
|
|
}
|
|
|
|
return items.Count;
|
|
}
|
|
}
|
|
}
|