Exemple #1
0
        /// <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);
        }
Exemple #2
0
 public static string ToCostkillerId(this ContractorCategory contractorCategory)
 {
     return(contractorCategory.ToString().ToLower());
 }
Exemple #3
0
            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
                    });
                }
            }