/// <summary> /// CK_API_CONTRACTOR_SEARCH - Will download all contractors with selected filters /// </summary> /// <param name="category">Either a contractor or an employee</param> /// <param name="nip">Numer identyfikacji podatkowej</param> /// <param name="pesel">Personal ID number</param> /// <param name="contractorExternalId"></param> /// <param name="onlyNotImported"></param> public async Task <List <DocumentContractor> > SearchContractors(ContractorCategory category = ContractorCategory.Contractor, string nip = null, string pesel = null, string contractorExternalId = null, bool?onlyNotImported = null) { const string method = "CK_API_CONTRACTOR_SEARCH"; //consts const int pageSize = 50; var OptionalParametersList = new List <string>(); if (!string.IsNullOrWhiteSpace(nip)) { OptionalParametersList.Add($"<nip>{nip}</nip>"); } if (!string.IsNullOrWhiteSpace(pesel)) { OptionalParametersList.Add($"<pesel>{pesel}</pesel>"); } if (!string.IsNullOrWhiteSpace(contractorExternalId)) { OptionalParametersList.Add($"<contr_external_id>{contractorExternalId}</contr_external_id>"); } if (onlyNotImported.HasValue) { OptionalParametersList.Add($"<only_not_imported>{onlyNotImported.Value}</only_not_imported>"); } string optionalTags = string.Join(string.Empty, OptionalParametersList); var completeDocumentsList = new List <DocumentContractor>(); int pageNumber = 0; int lastDownloadCount = 0; do { string payload = $"<request><company_id>{_companyId}</company_id><page_number>{pageNumber}</page_number><page_size>{pageSize}</page_size><category>{category.ToCostkillerId()}</category>{optionalTags}</request>"; var response = await Client.GetAsync(GetUrl(method, payload)); string xml = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode == false) { throw new CostkillerException(response, response.RequestMessage); } XmlDocument XmlDoc = new XmlDocument(); XmlDoc.LoadXml(xml); var docNode = XmlDoc.SelectSingleNode("/response/contractors"); var documentString = docNode.OuterXml; var serializer = new XmlSerializer(typeof(ContractorHolder)); using (var reader = new StringReader(documentString)) { var documents = (ContractorHolder)serializer.Deserialize(reader); completeDocumentsList.AddRange(documents.Contractors); lastDownloadCount = documents.Contractors.Count(); } pageNumber++; } while (lastDownloadCount == pageSize); return(completeDocumentsList); }
public static string ToCostkillerId(this ContractorCategory contractorCategory) { return(contractorCategory.ToString().ToLower()); }
public async Task <RegisterContractorVm> Handle(RegisterContractorCommand request, CancellationToken cancellationToken) { User user = await _context.User .SingleOrDefaultAsync(x => x.PhoneNumber.Equals(request.PhoneNumber) && !x.IsDelete, cancellationToken); if (user == null) { Code gender = await _context.Code .SingleOrDefaultAsync(x => x.CodeGuid == request.GenderGuid, cancellationToken); if (gender == null) { return(new RegisterContractorVm() { Message = "جنسیت نامعتبر است", State = (int)RegisterContractorState.GenderNotFound }); } Code business = await _context.Code .SingleOrDefaultAsync(x => x.CodeGuid == request.BusinessTypeGuid, cancellationToken); if (business == null) { return(new RegisterContractorVm() { Message = "نوع کسب و کار نامعتبر است", State = (int)RegisterContractorState.BusinessTypeNotFound }); } City city = await _context.City .SingleOrDefaultAsync(x => x.CityGuid == request.CityGuid, cancellationToken); if (city == null) { return(new RegisterContractorVm() { Message = "اطلاعات مکانی نامعتبر است", State = (int)RegisterContractorState.CityNotFound }); } //int t = new Random().Next(100000, 999999); const int t = 111111; User newUser = new User { RoleId = (int)Domain.Enums.Role.Contractor, GenderCodeId = gender.CodeId, FirstName = request.FirstName, LastName = request.LastName, Email = request.Email, PhoneNumber = request.PhoneNumber }; Contractor contractor = new Contractor() { User = newUser, BusinessTypeCodeId = business.CodeId, CityId = city.CityId, Latitude = request.Latitude, Longitude = request.Longitude, Credit = 0 }; foreach (Guid categoryGuid in request.CategoriesGuid) { Category category = await _context.Category .Where(x => x.CategoryGuid == categoryGuid) .SingleOrDefaultAsync(cancellationToken); if (category == null) { continue; } ContractorCategory contractorCategory = new ContractorCategory() { Contractor = contractor, CategoryId = category.CategoryId }; _context.ContractorCategory.Add(contractorCategory); } Token token = new Token { User = newUser, RoleCodeId = 15, Value = t, ExpireDate = DateTime.Now.AddMinutes(2) }; _context.User.Add(newUser); _context.Contractor.Add(contractor); _context.Token.Add(token); await _context.SaveChangesAsync(cancellationToken); object smsResult = await _sms.SendServiceable(Domain.Enums.SmsTemplate.VerifyAccount, request.PhoneNumber, t.ToString()); if (smsResult.GetType().Name != "SendResult") { // sent result } else { // sms error } return(new RegisterContractorVm() { Message = "عملیات موفق آمیز", State = (int)RegisterContractorState.Success }); } else { if (user.IsRegister) { return(new RegisterContractorVm() { Message = "کاربر مورد نظر در سامانه ثبت شده است", State = (int)RegisterContractorState.UserExists }); } Code gender = await _context.Code .SingleOrDefaultAsync(x => x.CodeGuid == request.GenderGuid, cancellationToken); if (gender == null) { return(new RegisterContractorVm() { Message = "جنسیت نامعتبر است", State = (int)RegisterContractorState.GenderNotFound }); } Code business = await _context.Code .SingleOrDefaultAsync(x => x.CodeGuid == request.BusinessTypeGuid, cancellationToken); if (business == null) { return(new RegisterContractorVm() { Message = "نوع کسب و کار نامعتبر است", State = (int)RegisterContractorState.BusinessTypeNotFound }); } City city = await _context.City .SingleOrDefaultAsync(x => x.CityGuid == request.CityGuid, cancellationToken); if (city == null) { return(new RegisterContractorVm() { Message = "اطلاعات مکانی نامعتبر است", State = (int)RegisterContractorState.CityNotFound }); } DateTime now = DateTime.Now; user.FirstName = request.FirstName; user.LastName = request.LastName; user.GenderCodeId = gender.CodeId; user.Email = request.Email; user.ModifiedDate = now; Contractor contractor = await _context.Contractor .Where(x => x.UserId == user.UserId) .SingleOrDefaultAsync(cancellationToken); if (contractor == null) { return(new RegisterContractorVm() { Message = "کاربر مورد نظر یافت نشد", State = (int)RegisterContractorState.ContractorNotFound }); } contractor.BusinessTypeCodeId = business.CodeId; contractor.CityId = city.CityId; contractor.Latitude = request.Latitude; contractor.Longitude = request.Longitude; contractor.ModifiedDate = now; List <ContractorCategory> oldCategories = await _context.ContractorCategory .Where(x => x.ContractorId == contractor.ContractorId) .ToListAsync(cancellationToken); foreach (ContractorCategory oldCategory in oldCategories) { _context.ContractorCategory.Remove(oldCategory); } foreach (Guid categoryGuid in request.CategoriesGuid) { Category category = await _context.Category .Where(x => x.CategoryGuid == categoryGuid) .SingleOrDefaultAsync(cancellationToken); if (category == null) { continue; } ContractorCategory contractorCategory = new ContractorCategory() { Contractor = contractor, CategoryId = category.CategoryId }; _context.ContractorCategory.Add(contractorCategory); } //int t = new Random().Next(100000, 999999); const int t = 111111; Token token = new Token { UserId = user.UserId, RoleCodeId = 15, Value = t, ExpireDate = now.AddMinutes(2) }; _context.Token.Add(token); await _context.SaveChangesAsync(cancellationToken); object smsResult = await _sms.SendServiceable(Domain.Enums.SmsTemplate.VerifyAccount, request.PhoneNumber, t.ToString()); if (smsResult.GetType().Name != "SendResult") { // sent result } else { // sms error } return(new RegisterContractorVm() { Message = "عملیات موفق آمیز", State = (int)RegisterContractorState.Success }); } }