< Summary

Class:WinSolutions.Sveta.Server.Services.Implements.CommonContragentService
Assembly:WinSolutions.Sveta.Server
File(s):/opt/dev/sveta_api_build/WinSolutions.Sveta.Server/Services/Implements/CommonContragentService.cs
Covered lines:17
Uncovered lines:36
Coverable lines:53
Total lines:168
Line coverage:32% (17 of 53)
Covered branches:2
Total branches:12
Branch coverage:16.6% (2 of 12)

Metrics

MethodLine coverage Branch coverage
.ctor(...)100%100%
PrepareContragents()0%100%
GetContragent()0%100%
GetContragentKind()0%100%
GetAddress()0%100%
ContragentInnKppExist()0%100%
GetContragent()0%100%
Create()100%50%
Update()100%100%
CreateContragentKind()0%0%
UpdateContragentKind()0%100%
CreateAddress()0%0%
UpdateAddress()0%100%
GetRecordState()0%100%

File(s)

/opt/dev/sveta_api_build/WinSolutions.Sveta.Server/Services/Implements/CommonContragentService.cs

#LineLine coverage
 1using Microsoft.EntityFrameworkCore;
 2using Microsoft.Extensions.Logging;
 3using System;
 4using System.Collections.Generic;
 5using System.Linq;
 6using System.Text;
 7using System.Threading.Tasks;
 8using WinSolutions.Sveta.Server.Data.DataModel.Contexts;
 9using WinSolutions.Sveta.Server.Data.DataModel.Entities;
 10using WinSolutions.Sveta.Server.Data.DataModel.Kinds;
 11using WinSolutions.Sveta.Server.Services.Interfaces;
 12using WinSolutions.Sveta.Server.Domain;
 13using WinSolutions.Sveta.Common;
 14using WinSolutions.Sveta.Common.Extensions;
 15
 16namespace WinSolutions.Sveta.Server.Services.Implements
 17{
 18    public class CommonContragentService : ICommonContragentService
 19    {
 20        readonly SvetaDbContext _db;
 21        readonly ILogger<CommonContragentService> _logger;
 22
 18623        public CommonContragentService(SvetaDbContext db, ILogger<CommonContragentService> logger)
 18624        {
 18625            _logger = logger;
 18626            _db = db;
 18627        }
 28
 29        /// <summary>
 30        /// предварительная выборка контрагентов
 31        /// </summary>
 32        /// <returns></returns>
 033        private IQueryable<Contragent> PrepareContragents() => _db.Contragents
 034                .Include(x => x.BankAccounts)
 035                .Include(x => x.JuridicAddress)
 036                .Include(x => x.PhysicAddress)
 037                .Include(d => d.ContragentsKind)
 038                .Include(d => d.RecState)
 039                .Include(d => d.Owner)
 040                .Where(e => !e.IsDeleted)
 041            .AsQueryable();
 42
 43        /// <summary>
 44        /// Получает контрагента по id
 45        /// </summary>
 46        /// <param name="contragentId">id контрагента</param>
 47        /// <returns>контрагент</returns>
 048        public async Task<Contragent> GetContragent(long contragentId) => await PrepareContragents()
 049            .FirstOrDefaultAsync(e => e.Id == contragentId);
 50
 51        /// <summary>
 52        /// получает тип контрагента
 53        /// </summary>
 54        /// <param name="guid">гуид типа</param>
 55        /// <returns>тип контрагента</returns>
 056        public async Task<ContragentsKind> GetContragentKind(Guid guid) => await _db.refContragentsKind
 057                .FirstOrDefaultAsync(e => !e.IsDeleted && e.ExternalKey.Equals(guid));
 58
 59        /// <summary>
 60        /// получает адрес на основе полного адреса
 61        /// </summary>
 62        /// <param name="fulladdress">полный адрес</param>
 63        /// <returns>адрес</returns>
 064        public async Task<Address> GetAddress(string fulladdress) => await _db.Address
 065                .FirstOrDefaultAsync(e => !e.IsDeleted && e.FullAddress.ToLower().Equals(fulladdress.NormalizeName().ToL
 66
 67        /// <summary>
 68        /// проверяет существует ли еще контрагент с такими же ИНН и КПП
 69        /// </summary>
 70        /// <param name="data">контрагент</param>
 71        /// <returns>значение true/false</returns>
 072        public async Task<bool> ContragentInnKppExist(Contragent data) => await _db.Contragents.AnyAsync(x => !x.IsDelet
 073                 x.Kpp.ToLower() == data.Kpp.NormalizeName().ToLower()
 074                 && x.Inn.ToLower() == data.Inn.NormalizeName().ToLower() &&  x.Id != data.Id);
 75
 76        /// <summary>
 77        ///получает контрагента по externalKey
 78        /// </summary>
 79        /// <param name="tid">externalKey</param>
 80        /// <returns>контрагент</returns>
 081        public async Task<Contragent> GetContragent(Guid tid) => await PrepareContragents().FirstOrDefaultAsync(x => x.E
 82
 83        /// <summary>
 84        /// создает контрагента
 85        /// </summary>
 86        /// <param name="data">контрагент</param>
 87        /// <param name="userId">id юзера, от кого выполняется</param>
 88        /// <returns></returns>
 89        public async Task Create(Contragent data, long userId)
 57190        {
 57191            _db.Entry(data.Owner).State = EntityState.Unchanged;
 57192            _db.Entry(data.JuridicAddress).State = EntityState.Unchanged;
 57193            _db.Entry(data.PhysicAddress).State = EntityState.Unchanged;
 57194            _db.Entry(data.ContragentsKind).State = EntityState.Unchanged;
 57195            await _db.Contragents.AddAsync(data);
 57196            await _db.SaveChangesAsync(userId);
 57197        }
 98
 99        /// <summary>
 100        /// обновляет контрагента
 101        /// </summary>
 102        /// <param name="data">контрагент</param>
 103        /// <param name="userId">id юзера, от кого выполняется</param>
 104        /// <returns></returns>
 105        public async Task Update(Contragent data, long userId)
 370106        {
 370107            _db.Contragents.Update(data);
 370108            await _db.SaveChangesAsync(userId);
 370109        }
 110
 111        /// <summary>
 112        /// обновляет тип контрагента
 113        /// </summary>
 114        /// <param name="data">тип контрагент</param>
 115        /// <param name="userId">id юзера, от кого выполняется</param>
 116        /// <returns></returns>
 117        public async Task CreateContragentKind(ContragentsKind data, long userId)
 0118        {
 0119            await _db.refContragentsKind.AddAsync(data);
 0120            await _db.SaveChangesAsync(userId);
 0121        }
 122
 123        /// <summary>
 124        /// обновляет тип контрагента
 125        /// </summary>
 126        /// <param name="data">тип контрагент</param>
 127        /// <param name="userId">id юзера, от кого выполняется</param>
 128        /// <returns></returns>
 129        public async Task UpdateContragentKind(ContragentsKind data, long userId)
 0130        {
 0131            _db.refContragentsKind.Update(data);
 0132            await _db.SaveChangesAsync(userId);
 0133        }
 134
 135        /// <summary>
 136        /// создает адрес
 137        /// </summary>
 138        /// <param name="data">адрес</param>
 139        /// <param name="userId">id юзера, от кого выполняется</param>
 140        /// <returns></returns>
 141        public async Task CreateAddress(Address data, long userId)
 0142        {
 0143            await _db.Address.AddAsync(data);
 0144            await _db.SaveChangesAsync(userId);
 0145        }
 146
 147        /// <summary>
 148        /// обновляет адрес
 149        /// </summary>
 150        /// <param name="data">адрес</param>
 151        /// <param name="userId">id юзера, от кого выполняется</param>
 152        /// <returns></returns>
 153        public async Task UpdateAddress(Address data, long userId)
 0154        {
 0155            _db.Address.Update(data);
 0156            await _db.SaveChangesAsync(userId);
 0157        }
 158
 159        /// <summary>
 160        /// Получает служебную запись
 161        /// </summary>
 162        /// <param name="id">id записи</param>
 163        /// <returns></returns>
 0164        private async Task<RecordsState> GetRecordState(long id) => await _db.refRecordsState.Where(e => !e.IsDeleted).F
 165
 166
 167    }
 168}