using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using ELT.Client.Models.Insurance; using ELT.Client.Models.Insurance.Request; using ELTKasko; namespace ELT.Client.Managers.Insurance { public class KaskoManager : InsuranceManager { private readonly EltSoapClient _eltKaskoSoap; public KaskoManager() { _eltKaskoSoap = new EltSoapClient(); } public override Dictionary Calculate( CalculateKaskoRequest calculateKaskoRequest, ELTPreData preRequestData) { var kaskoParams = calculateKaskoRequest.ELTParams; kaskoParams.UsageCityKLADR = preRequestData.Kladr; kaskoParams.Mark = preRequestData.Brand; kaskoParams.Model = preRequestData.Model; if (kaskoParams.Modification != null) kaskoParams.Modification.Name = preRequestData.Modification; var specialMachinery = calculateKaskoRequest.Preparams.SpecialMachinery; specialMachinery.SpecialMachineryMark = preRequestData.Brand; specialMachinery.SpecialMachineryModel = preRequestData.Model; kaskoParams.SpecialMachinery = specialMachinery; var result = new Dictionary(); var tasks = calculateKaskoRequest.CompanyIds.Distinct().Select(companyId => new Task(() => { var res = _eltKaskoSoap.PreliminaryKASKOCalculation( new ELTKasko.AuthInfo { Login = AuthInfo.Login, Password = AuthInfo.Password } , null , companyId , 0 , 0 , null , null , null , "13" , null , false , null , null , kaskoParams); result.Add(companyId, res); })); var tasksArray = tasks as Task[] ?? tasks.ToArray(); Parallel.ForEach(tasksArray, (t) => t.Start()); Task.WaitAll(tasksArray.ToArray()); return result; } } }