public RequisitionSendResult RequisitionSend(RequisitionSendArgument argument) { var result = new RequisitionSendResult(); var command = new RequisitionSend.Command { Argument = argument, Result = result }; _mediator.Send(command).Wait(); return(result); }
private bool ExistsInApplicants(string dicCustomerTypeCode, RequisitionSendArgument argument) { var dicCustomerTypeId = _dictionaryHelper.GetDictionaryIdByCode(nameof(DicCustomerType), dicCustomerTypeCode); foreach (var customer in argument.BlockCustomer) { if (customer.PatentLinkType.UID == 1 && customer.Type.UID == dicCustomerTypeId) { return(true); } } return(false); }
public (int requestId, int onlineStatusId, string incomingNum, int barcode) RequisitionDocumentAdd(RequisitionSendArgument argument) { var protectionDocTypeId = argument.PatentType.UID; //var protectionDocTypeCode = _dictionaryHelper.GetDictionaryCodeById(nameof(DicProtectionDocType), protectionDocTypeId); var protectionDocTypeCode = _dictionaryHelper.GetDictionaryCodeByExternalId(nameof(DicProtectionDocType), protectionDocTypeId); var receiveRypeCode = _integrationDictionaryHelper.GetReceiveTypeCode(argument.SystemInfo.Sender); var receiveTypeId = _dictionaryHelper.GetDictionaryIdByCode(nameof(DicReceiveType), receiveRypeCode); var departmentCode = _integrationEnumMapper.MapToDepartment(protectionDocTypeCode); var departmentId = _dictionaryHelper.GetDictionaryIdByCode(nameof(DicDepartment), departmentCode); var speciesTradeMarkId = _dictionaryHelper.GetSpeciesTradeMarkId(argument.IsCollectiveTradeMark); var typeTrademarkId = _dictionaryHelper.GetNullableDictionaryIdByCode(nameof(DicTypeTrademark), argument.PatentSubType); DicCustomer customer = null; customer = Mapper.Map <DicCustomer>( argument, el => el.Items[nameof(customer.TypeId)] = _dictionaryHelper.GetDictionaryEntityByExternalId(nameof(DicCustomerType), argument.CustomerType.UID).Id); var addressee = _integrationDictionaryHelper.GetCustomerIdOrCreateNew(customer); var subTypeCode = GetSubType(protectionDocTypeCode); var requestTypeId = _dictionaryHelper.GetDictionaryIdByCode(nameof(DicProtectionDocSubType), subTypeCode); //if (int.TryParse(argument.PatentSubType, out var patentSubType)) //{ // _dictionaryHelper.ChechDictionaryId(nameof(DicProtectionDocSubType), patentSubType); // requestTypeId = patentSubType; //} var request = new Request { ProtectionDocTypeId = protectionDocTypeId, ReceiveTypeId = receiveTypeId, DepartmentId = departmentId, DivisionId = _dictionaryHelper.GetDictionaryIdByCode(nameof(DicDivision), DicDivisionCodes.RGP_NIIS), FlDivisionId = _integrationDictionaryHelper.GetDivisionId(_configuration.MainExecutorIds[protectionDocTypeCode]), IsComplete = false, AddresseeId = addressee.Id, AddresseeAddress = addressee.Address, UserId = _configuration.MainExecutorIds[protectionDocTypeCode], SpeciesTradeMarkId = speciesTradeMarkId, TypeTrademarkId = typeTrademarkId, RequestTypeId = requestTypeId, IsFromLk = true }; if (argument.BlockFile.Any(d => d.Type.UID == 292)) { request.Referat = argument.BlockFile.First(d => d.Type.UID == 292).Type.Note; } if (argument.BlockFile != null) { var imageFile = _attachFileHelper.GetImageFile(argument.BlockFile, _validationHelper.SenderIsPep(argument.SystemInfo.Sender)); if (imageFile != null) { request.Image = imageFile; request.IsImageFromName = false; } } CreateRequest(Mapper.Map(argument, request)); if (argument.BlockFile != null) { var meidaFile = argument.BlockFile.Where(d => d.Type.UID == 4421).ToList(); if (meidaFile.Any()) { foreach (var attachedFile in meidaFile) { _attachFileHelper.AttachFile(new AttachedFileModel { PageCount = attachedFile.PageCount, CopyCount = 0, File = attachedFile.File.Content, Length = attachedFile.File.Content.Length, IsMain = false, Name = attachedFile.File.Name }, request.Id); } } } var requestInfo = new RequestInfo { RequestId = request.Id, FlagTth = false, IsConventionPriority = false, IsExhibitPriority = false, IsStandardFont = false, IsTransliteration = false, IsTranslation = false, IsVolumeTZ = false, IsColorPerformance = false, AcceptAgreement = false, BreedCountryId = argument.BreedCountry != null ? (argument.BreedCountry.UID > 0 ? _dictionaryHelper.GetDictionaryIdByExternalId(nameof(DicCountry), argument.BreedCountry.UID) : (int?)null) : null }; _niisContext.RequestInfos.Add(Mapper.Map(argument, requestInfo)); _niisContext.SaveChanges(); var dicDocTypeCode = _integrationEnumMapper.MapProtectionDocTypeToDocumentType(protectionDocTypeCode); var docTypeId = _dictionaryHelper.GetDictionaryIdByCode(nameof(DicDocumentType), dicDocTypeCode); var document = new Document(_dictionaryHelper.GetDocumentType(docTypeId).type) { TypeId = docTypeId, DateCreate = DateTimeOffset.Now, AddresseeId = addressee.Id, StatusId = _dictionaryHelper.GetDictionaryIdByCode(nameof(DicDocumentStatus), DicDocumentStatusCodes.InWork), ReceiveTypeId = _dictionaryHelper.GetDictionaryIdByCode(nameof(DicReceiveType), DicReceiveTypeCodes.ElectronicFeed) }; _documentHelper.CreateDocument(document); _attachFileHelper.AttachFile(new AttachedFileModel { PageCount = argument.PageCount, CopyCount = argument.CopyCount, File = argument.RequisitionFile.Content, Length = argument.RequisitionFile.Content.Length, IsMain = true, Name = argument.RequisitionFile.Name }, document); _niisContext.Documents.Update(document); _niisContext.SaveChanges(); _niisContext.RequestsDocuments.Add(new RequestDocument { DocumentId = document.Id, RequestId = request.Id }); _niisContext.SaveChanges(); var routeId = _integrationDictionaryHelper.GetRouteIdByProtectionDocType(protectionDocTypeId); var stage = _integrationDictionaryHelper.GetRouteStage(routeId); var requestWorkflow = new RequestWorkflow { OwnerId = request.Id, DateCreate = DateTimeOffset.Now, RouteId = routeId, CurrentStageId = stage.Id, CurrentUserId = _configuration.MainExecutorIds[protectionDocTypeCode], IsComplete = stage.IsLast, IsSystem = stage.IsSystem, IsMain = stage.IsMain }; _niisContext.RequestWorkflows.Add(requestWorkflow); _niisContext.SaveChanges(); request.CurrentWorkflowId = requestWorkflow.Id; _niisContext.Requests.Update(request); _niisContext.SaveChanges(); _integrationStatusUpdater.Add(requestWorkflow.Id); var dicCustomer = _integrationDictionaryHelper.GetCustomerIdOrCreateNew(new DicCustomer { TypeId = _dictionaryHelper.GetDictionaryIdByCode(nameof(DicCustomerType), DicCustomerTypeCodes.Undefined), NameRu = argument.AdrCustomerName, Phone = argument.AdrPhone, PhoneFax = argument.AdrFax, Email = argument.AdrEmail, Address = $"{argument.AdrRegion}, {argument.AdrStreet}, {argument.AdrPostCode}" }); _niisContext.RequestCustomers.Add(new RequestCustomer { CustomerId = dicCustomer.Id, RequestId = request.Id, DateCreate = DateTimeOffset.Now, CustomerRoleId = _dictionaryHelper.GetDictionaryIdByCode(nameof(DicCustomerRole), DicCustomerRole.Codes.Correspondence) }); _niisContext.SaveChanges(); _egovPayHelper.CreatePay(argument.Pay); var onlineStatusId = 0; if (requestWorkflow.CurrentStageId != null) { onlineStatusId = _integrationDictionaryHelper.GetOnlineStatus(requestWorkflow.CurrentStageId.Value); } return(requestId : request.Id, onlineStatusId : onlineStatusId, incomingNum : request.IncomingNumber, barcode : request.Barcode); }
public string GetValidationErrors(RequisitionSendArgument argument) { if (argument.PatentType == null) { return("Не указан ExternalPatentType!"); } var errors = new List <string>(); if (string.IsNullOrEmpty(argument.AdrCustomerName)) { errors.Add("AdrCustomerName не указан!"); } if (argument.AdrCountry == null) { errors.Add("AdrCountry не указан!"); } if (argument.AdrStreet == null) { errors.Add("AdrStreet не указан!"); } if (argument.AdrEmail == null) { errors.Add("AdrEmail не указан!"); } var applicants = 0; var attorney = 0; var authors = 0; var errRefKey = false; var errCusType = false; foreach (var customer in argument.BlockCustomer) { if (customer.PatentLinkType == null) { errRefKey = true; } else { switch (customer.PatentLinkType.UID) { case 1: applicants++; break; case 479: case 4: attorney++; break; case 2: authors++; break; } } if (customer.Type == null) { errCusType = true; } } if (errRefKey) { errors.Add("BlockCustomer: Customer.PatentLinkType не указан!"); } if (errCusType) { errors.Add("BlockCustomer: Customer.Type не указан!"); } if (applicants <= 0) { errors.Add("Нужно добавить как минимум одного заявителя!"); } else { var cusType = GetErrApplicatTypeForPatentType(argument.PatentType.UID, argument.BlockCustomer); if (!string.IsNullOrEmpty(cusType)) { errors.Add("Для заявки ExternalPatentType.UID = " + argument.PatentType.UID + ", заявитель не может быть BlockCustomer: Customer.Type.UID = " + cusType); } } var dicProtectionDocTypeCode = _dictionaryHelper.GetDictionaryCodeByExternalId(nameof(DicProtectionDocType), argument.PatentType.UID); if (dicProtectionDocTypeCode == DicProtectionDocType.Codes.Trademark) { if (argument.BlockClassification.Length <= 0) { errors.Add("Нужно указать как минимум один МКТУ!"); } } if (authors <= 0 && ( dicProtectionDocTypeCode == DicProtectionDocType.Codes.Invention || dicProtectionDocTypeCode == DicProtectionDocType.Codes.IndustrialModel || dicProtectionDocTypeCode == DicProtectionDocType.Codes.UsefulModel || dicProtectionDocTypeCode == DicProtectionDocType.Codes.SelectiveAchievement )) { errors.Add("Нужно добавить как минимум одного автора!"); } var patentLinkType = false; var customerType = false; var errCustomerName = false; foreach (var customer in argument.BlockCustomer) { if (customer.PatentLinkType == null) { patentLinkType = true; } if (customer.Type == null) { customerType = true; } if (string.IsNullOrEmpty(customer.NameRu)) { errCustomerName = true; } } if (errCustomerName) { errors.Add("Не указан ФИО/Полное наименование на русском языке BlockCustomer: Customer.NameRu"); } if (patentLinkType) { errors.Add("Не указан тип связки контрагента BlockCustomer: Customer.PatentLinkType"); } if (customerType) { errors.Add("Не указан тип контрагента BlockCustomer: Customer.Type"); } if (!patentLinkType && !customerType) { errors.AddRange(GetArgumentErrorRequisitionSendAttachedFiles(argument, argument)); } if (!_validationHelper.SenderIsPep(argument.SystemInfo.Sender) && _validationHelper.FileIsEmpty(argument.RequisitionFile, argument)) { errors.Add("RequisitionFile. Заявление не может быть пустым"); } if (_validationHelper.SenderIsPep(argument.SystemInfo.Sender) && argument.RequisitionFile != null) { errors.Add("ПЭП должен отправлять RequisitionFile = null"); } if (_validationHelper.SenderIsPep(argument.SystemInfo.Sender) && argument.RequisitionFile == null) { argument.RequisitionFile = new File { Name = argument.SystemInfo.ChainId + ".pdf" }; try { argument.RequisitionFile.Content = _attachFileHelper.DownloadPepRequisitionFile(argument.SystemInfo.ChainId, argument.Xin); } catch (Exception ex) { Log.Error(ex, ex.Message); errors.Add("Не удалось получить pdf файл заявки. Заявка " + argument.SystemInfo.ChainId); errors.Add(ex.Message); } } if (argument.RequisitionFile != null && argument.RequisitionFile.Content != null) { if (argument.RequisitionFile.Content.Length < 10) { errors.Add("Файл заявки пуст. Заявка " + argument.SystemInfo.ChainId); } else { const string textPdf = "%PDF"; var textFile = Encoding.UTF8.GetString(argument.RequisitionFile.Content, 0, 4); if (textFile != textPdf) { errors.Add("Файл заявки не является PDF-документом. Заявка " + argument.SystemInfo.ChainId); } } } if (errors.Count == 0) { return(null); } return(string.Join(Environment.NewLine, errors.ToArray())); }
private string[] GetArgumentErrorRequisitionSendAttachedFiles(RequisitionSendArgument argument, SystemInfoMessage infoMessage) { var errors = new List <string>(); var arg = new GetAttachedFileMetadataArgument(); var result = new GetAttachedFileMetadataResult(); arg.MainDocumentType = argument.PatentType; arg.JurApplicantExists = ExistsInApplicants(DicCustomerTypeCodes.Juridical, argument); arg.IpApplicantExists = ExistsInApplicants(DicCustomerTypeCodes.SoloEntrepreneur, argument); //todo Поменялся механизм по которому определяется яввляется ли контрагент резидентом или нет. Не понятно как разруливать с интеграцией arg.NonResidentApplicantExists = ExistsInApplicants(DicCustomerTypeCodes.Nonresident, argument); _attachedFileMetadata.Handle(arg, result); var addedFileTypes = new List <int>(); if (argument.BlockFile != null) { foreach (var attachedFile in argument.BlockFile) { if (attachedFile == null) { errors.Add("BlockFile AttachedFile == null"); continue; } if (attachedFile.Type == null || attachedFile.Type.UID == 0) { errors.Add("Не указан тип документа BlockFile: AttachedFile.Type"); continue; } //var metaData = GetMetaData(attachedFile.Type, result.Data); //if (metaData == null) //{ // errors.Add("BlockFile AttachedFile.Type.UID = " + attachedFile.Type.UID + // ". Данный документ не относится к этому типу патента."); // continue; //} if (_validationHelper.FileIsEmpty(attachedFile.File, infoMessage)) { errors.Add("Не добавлен файл для документа BlockFile: AttachedFile.Type.UID = " + attachedFile.Type.UID); continue; } if (!_validationHelper.FileNameIsCorrect(attachedFile.File, infoMessage)) { errors.Add( "Не указано имя файла или некорректное имя файла BlockFile: AttachedFile.File, Type.UID = " + attachedFile.Type.UID); continue; } //if (!_validationHelper.CheckFileExtension(metaData.Extensions, attachedFile.File, infoMessage)) //{ // errors.Add( // "Неправильный формат файла для данного типа документа BlockFile: AttachedFile.Type.UID = " // + attachedFile.Type.UID + ", файл должен быть в формате\"" + // string.Join(", ", metaData.Extensions) + "\""); // continue; //} addedFileTypes.Add(attachedFile.Type.UID); } } //foreach (var metadata in result.Data) //{ // if (metadata.Required && !addedFileTypes.Contains(metadata.AttachedFileType.UID)) // { // errors.Add("Не добавлен обязательный документ BlockFile: AttachedFile.Type.UID = " + // metadata.AttachedFileType.UID); // } //} return(errors.ToArray()); }