CostCalculationItem/IRaCIS.Core.Application/Financial/TrialRevenuesPriceService.cs

163 lines
9.4 KiB
C#
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

using AutoMapper;
using IRaCIS.Application.ExpressionExtend;
using IRaCIS.Application.Interfaces;
using IRaCIS.Application.ViewModels;
using IRaCIS.Core.Application.Contracts.RequestAndResponse;
using IRaCIS.Infra.Data.ExpressionExtend;
using System;
using System.Linq;
using System.Linq.Expressions;
using IRaCIS.Core.Domain.Interfaces;
using IRaCIS.Core.Domain.Models;
namespace IRaCIS.Application.Services
{
public class TrialRevenuesPriceService : ITrialRevenuesPriceService
{
private readonly ITrialRepository _trialRepository;
private readonly ITrialRevenuesPriceRepository _trialRevenuesPriceRepository;
private readonly ICRORepository _croRepository;
private readonly IDictionaryRepository _dictionaryRepository;
private readonly ITrialRevenuesPriceVerificationRepository _trialRevenuesPriceVerificationRepository;
private readonly IMapper _mapper;
public TrialRevenuesPriceService(ITrialRepository trialRepository, ITrialRevenuesPriceRepository trialCostRepository, ICRORepository croCompanyRepository, IDictionaryRepository dictionaryRepository, ITrialRevenuesPriceVerificationRepository trialRevenuesPriceVerificationRepository, IMapper mapper)
{
_trialRepository = trialRepository;
_trialRevenuesPriceRepository = trialCostRepository;
_croRepository = croCompanyRepository;
_dictionaryRepository = dictionaryRepository;
_trialRevenuesPriceVerificationRepository = trialRevenuesPriceVerificationRepository;
_mapper = mapper;
}
public IResponseOutput AddOrUpdateTrialRevenuesPrice(TrialRevenuesPriceDTO model)
{
var count = model.Timepoint +
model.TimepointIn24H +
model.TimepointIn48H +
model.Adjudication +
model.AdjudicationIn24H +
model.AdjudicationIn48H +
model.Downtime +
model.Global +
model.Training +
model.AdditionalCharge1 +
model.AdditionalCharge2 +
model.AdditionalCharge3;
if (count <= 0)
{
return ResponseOutput.NotOk("Please add meaningful data");
}
var trialExistedItem = _trialRevenuesPriceRepository.FindSingleOrDefault(u => u.TrialId == model.TrialId);
if (trialExistedItem == null)//insert
{
var trialCost = _mapper.Map<TrialRevenuesPrice>(model);
_trialRevenuesPriceRepository.Add(trialCost);
var success = _trialRevenuesPriceRepository.SaveChanges();
return ResponseOutput.Result(success, trialCost.Id.ToString());
}
else//update
{
var trialRevenuesPrice = _trialRevenuesPriceRepository.GetAll()
.FirstOrDefault(u => u.TrialId == model.TrialId);
_trialRevenuesPriceRepository.Update(_mapper.Map(model, trialRevenuesPrice));
// 完善价格的 将对应的列设置为true 变更为有价格了
var aaa = _trialRevenuesPriceVerificationRepository.Update(t => t.TrialId == model.TrialId, u => new TrialRevenuesPriceVerification()
{
//有价格 则设置为true 否则 该列不变
Timepoint = model.Timepoint > 0 || u.Timepoint,
TimepointIn24H = model.TimepointIn24H > 0 || u.TimepointIn24H,
TimepointIn48H = model.TimepointIn48H > 0 || u.TimepointIn48H,
Adjudication = model.Adjudication > 0 || u.Adjudication,
AdjudicationIn24H =
model.AdjudicationIn24H > 0 || u.AdjudicationIn24H,
AdjudicationIn48H =
model.AdjudicationIn48H > 0 || u.AdjudicationIn48H,
Global = model.Global > 0 || u.Global,
Downtime = model.Downtime > 0 || u.Downtime,
Training = model.Training > 0 || u.Training,
RefresherTraining = model.RefresherTraining > 0 || u.RefresherTraining,
});
//删除所有有价格的记录 为true 表示有价格或者不需要价格 缺价格的为false
_trialRevenuesPriceVerificationRepository.Delete(t => t.TrialId == model.TrialId &&
t.Timepoint&&
t.TimepointIn24H&&
t.TimepointIn48H &&
t.Adjudication &&
t.AdjudicationIn24H &&
t.AdjudicationIn48H &&
t.Global &&
t.Training &&t.RefresherTraining);
var success = _trialRevenuesPriceRepository.SaveChanges();
return ResponseOutput.Result(success);
}
}
public bool DeleteTrialCost(Guid id)
{
return _trialRevenuesPriceRepository.Delete(u => u.Id == id);
}
public PageOutput<TrialRevenuesPriceDetialDTO> GetTrialRevenuesPriceList(TrialRevenuesPriceQueryDTO queryParam)
{
Expression<Func<Trial, bool>> trialLambda = x => true;
if (queryParam.CroId != Guid.Empty && queryParam.CroId != null)
{
trialLambda = trialLambda.And(o => o.CROId == queryParam.CroId);
}
var trialQueryable = from trial in _trialRepository.Find(u => u.Code.Contains(queryParam.KeyWord)
|| u.Indication.Contains(queryParam.KeyWord)).Where(trialLambda)
join cro in _croRepository.GetAll() on trial.CROId equals cro.Id into CRO
from croInfo in CRO.DefaultIfEmpty()
join dic in _dictionaryRepository.GetAll() on trial.ReviewModeId equals dic.Id into dict
from dic in dict.DefaultIfEmpty()
join trialCost in _trialRevenuesPriceRepository.GetAll()
on trial.Id equals trialCost.TrialId into trialInfo
from trialCostItem in trialInfo.DefaultIfEmpty()
select new TrialRevenuesPriceDetialDTO
{
Id = trialCostItem == null ? Guid.Empty : trialCostItem.Id,
TrialId = trial.Id,
TrialCode = trial.Code,
Indication = trial.Indication,
Cro = croInfo == null ? string.Empty : croInfo.CROName,
ReviewMode = dic == null ? string.Empty : dic.Value,
Timepoint = trialCostItem == null ? 0 : trialCostItem.Timepoint,
TimepointIn24H = trialCostItem == null ? 0 : trialCostItem.TimepointIn24H,
TimepointIn48H = trialCostItem == null ? 0 : trialCostItem.TimepointIn48H,
Adjudication = trialCostItem == null ? 0 : trialCostItem.Adjudication,
AdjudicationIn24H = trialCostItem == null ? 0 : trialCostItem.AdjudicationIn24H,
AdjudicationIn48H = trialCostItem == null ? 0 : trialCostItem.AdjudicationIn48H,
Downtime = trialCostItem == null ? 0 : trialCostItem.Downtime,
Global = trialCostItem == null ? 0 : trialCostItem.Global,
Training = trialCostItem == null ? 0 : trialCostItem.Training,
RefresherTraining= trialCostItem == null ? 0 : trialCostItem.RefresherTraining,
AdditionalCharge1 = trialCostItem == null ? 0 : trialCostItem.AdditionalCharge1,
AdditionalCharge2 = trialCostItem == null ? 0 : trialCostItem.AdditionalCharge2,
AdditionalCharge3 = trialCostItem == null ? 0 : trialCostItem.AdditionalCharge3,
Note = trialCostItem == null ? "" : trialCostItem.Note,
Expedited = trial.Expedited
};
var count = trialQueryable.Count();
var propName = string.IsNullOrWhiteSpace(queryParam.SortField) ? "TrialCode" : queryParam.SortField;
trialQueryable = queryParam.Asc ? trialQueryable.OrderBy(propName) : trialQueryable.OrderByDescending(propName);
trialQueryable = trialQueryable.Skip((queryParam.PageIndex - 1) * queryParam.PageSize)
.Take(queryParam.PageSize);
var trialList = trialQueryable.ToList();
return new PageOutput<TrialRevenuesPriceDetialDTO>(queryParam.PageIndex, queryParam.PageSize, count, trialList);
}
}
}