From 5236f52480adf7c7131ae0d4323ad6d6ce395a2e Mon Sep 17 00:00:00 2001 From: Andrea Cattaneo Date: Mon, 25 Jul 2022 14:21:29 +0200 Subject: [PATCH] AXRepository - gestione mittente / destinatari --- .github/workflows/build.yml | 58 ++--- .../ACUtils.AXRepository.csproj | 6 +- ACUtils.AXRepository/AXModel.cs | 188 +++++++++++++---- ACUtils.AXRepository/ArxivarRepository.cs | 199 +++++++++++++++--- ACUtils.AXRepository/AxExt.cs | 29 ++- ACUtils.AXRepository/UserProfileType.cs | 16 ++ Tests/AXTests.cs | 18 ++ Tests/Stuff/AXDoc.cs | 13 ++ Tests/Tests.csproj | 6 + push.bat | 1 - 10 files changed, 415 insertions(+), 119 deletions(-) create mode 100644 ACUtils.AXRepository/UserProfileType.cs create mode 100644 Tests/AXTests.cs create mode 100644 Tests/Stuff/AXDoc.cs delete mode 100644 push.bat diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ceee4df..95c66ef 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: .NET +name: build and publish on: push: @@ -25,18 +25,18 @@ jobs: - run: cd $GITHUB_WORKSPACE - - uses: actions/setup-python@v4 - with: - python-version: '3.x' - architecture: 'x64' - - name: Change package version - run: | - python -c "import urllib.request; urllib.request.urlretrieve('https://raw.githubusercontent.com/il-katta/jenkins-libs/master/resources/it/loopback/jenkins/projedit.py', 'projedit.py')" - foreach ($file in (Get-ChildItem ./ACUtils*/*.csproj) ) { - $version = python projedit.py netstandard $file - Write-Output "::set-output name=PROJECT_VERSION::$version" - } - id: project_version + #- uses: actions/setup-python@v4 + # with: + # python-version: '3.x' + # architecture: 'x64' + #- name: Change package version + # run: | + # python -c "import urllib.request; urllib.request.urlretrieve('https://raw.githubusercontent.com/il-katta/jenkins-libs/master/resources/it/loopback/jenkins/projedit.py', 'projedit.py')" + # foreach ($file in (Get-ChildItem ./ACUtils*/*.csproj) ) { + # $version = python projedit.py netstandard $file + # Write-Output "::set-output name=PROJECT_VERSION::$version" + # } + # id: project_version - name: Restore packages run: nuget restore ACUtils.sln @@ -46,13 +46,13 @@ jobs: msbuild.exe ACUtils.sln /p:Configuration="Release" /p:Platform="Any CPU" /t:"Restore" msbuild.exe ACUtils.sln /p:Configuration="Release" /p:Platform="Any CPU" /t:"Rebuild" - - name: Commit deploy - run: | - git config user.name github-actions - git config user.email github-actions@github.com - git add ./ACUtils*/*.csproj - git commit -m "deploy" - git push + #- name: Commit deploy + # run: | + # git config user.name github-actions + # git config user.email github-actions@github.com + # git add ./ACUtils*/*.csproj + # git commit -m "deploy" + # git push - name: Archive Nuget packages uses: actions/upload-artifact@v3 @@ -62,15 +62,15 @@ jobs: dist/*.nupkg dist/*.snupkg - - name: Create release - uses: "marvinpinto/action-automatic-releases@latest" - with: - repo_token: "${{ secrets.GITHUB_TOKEN }}" - prerelease: false - automatic_release_tag: "${{ steps.project_version.outputs.PROJECT_VERSION }}" - files: | - dist/*.nupkg - dist/*.snupkg + #- name: Create release + # uses: "marvinpinto/action-automatic-releases@latest" + # with: + # repo_token: "${{ secrets.GITHUB_TOKEN }}" + # prerelease: false + # automatic_release_tag: "${{ steps.project_version.outputs.PROJECT_VERSION }}" + # files: | + # dist/*.nupkg + # dist/*.snupkg - name: Publish run: | diff --git a/ACUtils.AXRepository/ACUtils.AXRepository.csproj b/ACUtils.AXRepository/ACUtils.AXRepository.csproj index 839f9ab..589901a 100644 --- a/ACUtils.AXRepository/ACUtils.AXRepository.csproj +++ b/ACUtils.AXRepository/ACUtils.AXRepository.csproj @@ -5,13 +5,14 @@ Andrea Cattaneo true false - 1.0.0.137 - 1.0.0.137 + 1.0.0.138 + 1.0.0.138 Utility per gestione classi documentali Arxivar it true snupkg ..\dist\ + false @@ -21,7 +22,6 @@ - diff --git a/ACUtils.AXRepository/AXModel.cs b/ACUtils.AXRepository/AXModel.cs index 7daa5b8..be387d5 100644 --- a/ACUtils.AXRepository/AXModel.cs +++ b/ACUtils.AXRepository/AXModel.cs @@ -13,16 +13,42 @@ namespace ACUtils.AXRepository #region properties [AxField(ax_field: "DOCNUMBER")] - public int? DOCNUMBER { get; set; } + public virtual int? DOCNUMBER { get; set; } public string FilePath { get; set; } - [AxField(ax_field: "DATA7_3")] - public DateTime? DataUltimaModifica { get; set; } + private string _stato; + [AxField(ax_field: "Stato")] + public virtual string STATO + { + get => _stato ?? GetArxivarAttribute()?.Stato; + set => _stato = value; + } [AxField(ax_field: "From")] public virtual string User { get; set; } + [AxField(ax_field: "From_ExternalId")] + public virtual string MittenteCodiceRubrica { get; set; } + + [AxField(ax_field: "From")] + public virtual int? MittenteId { get; protected set; } + + //[AxField(ax_field: "From_IdRubrica")] + public virtual int? MittenteIdRubrica { get; set; } + + [AxField(ax_field: "To_ExternalId")] + public virtual IEnumerable DestinatariCodiceRubrica { get; set; } + + [AxField(ax_field: "To")] + public virtual IEnumerable DestinatariId { get; protected set; } + + [AxField(ax_field: "To")] + public virtual IEnumerable Destinatari { get; protected set; } + + //[AxField(ax_field: "To_IdRubrica")] + public virtual int? DestinatariIdRubrica { get; set; } + /// /// campo usato per popolare l'oggetto del documento /// @@ -33,8 +59,12 @@ namespace ACUtils.AXRepository /// campo usato per settare la data documento su arxivar /// eseguire l'override per modificare il campo /// - private DateTime? _dataDoc; - public virtual DateTime? DataDoc { get => _dataDoc ?? DataUltimaModifica; set => _dataDoc = value; } + + [AxField(ax_field: "DataDoc")] + public virtual DateTime? DataDoc { get; set; } + + [AxField(ax_field: "WORKFLOW")] + public virtual bool? Workflow { get; set; } public List Allegati { get; set; } @@ -42,18 +72,65 @@ namespace ACUtils.AXRepository #region setters - public override void idrate(DataRow dr) + protected override void setValue(string key, object value, Type colType = null) + { + var property = this.GetType().GetProperty(key); + var sourceType = value?.GetType(); + var targetType = property.PropertyType; + if (sourceType == typeof(ArxivarNext.Model.UserProfileDTO)) + { + if (targetType == typeof(string)) + { + value = ((ArxivarNext.Model.UserProfileDTO)value).Description; + } + if (targetType == typeof(int) || targetType == typeof(int?)) + { + value = ((ArxivarNext.Model.UserProfileDTO)value).AddressBookId; + } + } + + if (sourceType == typeof(ArxivarNextManagement.Model.UserProfileDTO)) + { + if (targetType == typeof(string)) + { + value = ((ArxivarNextManagement.Model.UserProfileDTO)value).Description; + } + if (targetType == typeof(int) || targetType == typeof(int?)) + { + value = ((ArxivarNextManagement.Model.UserProfileDTO)value).AddressBookId; + } + } + if (sourceType == typeof(List)) + { + var source = (List)value; + if (targetType == typeof(List) || targetType == typeof(IEnumerable)) + { + value = source.Select(e => e.Description).ToList(); + } + if ( + targetType == typeof(List) || targetType == typeof(List) || + targetType == typeof(IEnumerable) || targetType == typeof(IEnumerable) + ) + { + value = source.Select(e => e.AddressBookId).ToList(); + } + } + + base.setValue(key, value, colType); + } + + public void idrate(DataRow dr) { // popola i campi che corrispondono ai nomi delle property base.idrate(dr); - // popola i campi che corrispondono ai nome deninito del Attribute della property + // popola i campi che corrispondono al nome definito nel Attribute della property PropertyInfo[] properties = this.GetType().GetProperties(); foreach (PropertyInfo property in properties) { if (!dr.Table.Columns.Contains(property.Name)) { - var attr = this.GetArxivarAttribute(property.Name); + var attr = this.GetDbAttribute(property.Name); if (attr?.DbField == null) continue; if (dr.Table.Columns.Contains(attr.DbField)) { @@ -64,7 +141,7 @@ public override void idrate(DataRow dr) catch (Exception e) { Console.WriteLine($"{attr.DbField} -> {property.Name} - {dr[attr.DbField]}: {e?.Message}"); // TODO: write log entry - //throw; + throw; } } } @@ -74,58 +151,72 @@ public override void idrate(DataRow dr) public static T Idrate(ArxivarNext.Model.EditProfileSchemaDTO model) { var obj = new T(); - var properties = obj.GetType().GetProperties(); foreach (var field in model.Fields) { - if (obj.HasAXField(field.Name)) + if (field.GetType().GetProperty("Value") != null) { - foreach (var property in properties) - { - if (field.Name == obj.GetArxivarAttribute(property.Name)?.AXField) - { - dynamic dfiled = field; - obj.setValue(property.Name, dfiled.Value); - } - - } + dynamic dfiled = field; // per poter accedere alla property Value + obj.SetPropertyIfExists(field.Name, dfiled.Value); } } - obj.DOCNUMBER = model.ProfileInfo.DocNumber; + + obj.SetPropertyIfExists("DOCNUMBER", model.ProfileInfo.DocNumber); + + var mittente = model.Fields.GetField("TO"); + obj.SetPropertyIfExists("To_ExternalId", mittente.Value?.Select(m => m.ExternalId)); + + var destinatario = model.Fields.GetField("FROM"); + obj.SetPropertyIfExists("From_ExternalId", destinatario.Value?.ExternalId); return obj; } - public static T Idrate(ArxivarNext.Model.RowSearchResult model) + public static T Idrate(ArxivarNext.Model.RowSearchResult searchresult) { var obj = new T(); - var properties = obj.GetType().GetProperties(); - foreach (var col in model.Columns) + foreach (var col in searchresult.Columns) { - if (obj.HasAXField(col.Id)) + obj.SetPropertyIfExists(col.Id, col.Value); + } + return obj; + } + + public bool SetPropertyIfExists(string axField, object value) + { + bool found = false; + if (this.HasAXField(axField)) + { + var properties = this.GetType().GetProperties(); + foreach (var property in properties) { - foreach (var property in properties) + if (axField == this.GetArxivarAttribute(property.Name)?.AXField) { - if (col.Id == obj.GetArxivarAttribute(property.Name)?.AXField) - obj.setValue(property.Name, col.Value); - + this.setValue(property.Name, value); + found = true; } + } } - return obj; +#if DEBUG + else + { + //System.Diagnostics.Debugger.Break(); + } +#endif + return found; } - - public static List Idrate(List results) + public static List Idrate(List results) { return (from result in results select Idrate(result)).ToList(); } - #endregion +#endregion - #region testers - public bool HasAS400Field(string field) +#region testers + public new bool HasDbField(string field) { return this.GetType().GetProperties().Where(property => - GetArxivarAttribute(property.Name)?.DbField == field + GetAxDbAttribute(property.Name)?.DbField == field ).Any(); } @@ -133,9 +224,9 @@ public bool HasAXField(string field) { return this.GetType().GetProperties().Where(property => GetArxivarAttribute(property.Name)?.AXField == field).Any(); } - #endregion +#endregion - #region getters +#region getters public AxClassAttribute GetArxivarAttribute() { @@ -143,14 +234,21 @@ public AxClassAttribute GetArxivarAttribute() return attrs.LastOrDefault() as AxClassAttribute; } - public AxDbFieldAttribute GetArxivarAttribute(string propertyName) + public AxFieldAttribute GetArxivarAttribute(string propertyName) + { + var propr = GetType().GetProperty(propertyName); + var attrs = propr.GetCustomAttributes(typeof(AxFieldAttribute), true); + return attrs.LastOrDefault() as AxFieldAttribute; + } + + public AxDbFieldAttribute GetAxDbAttribute(string propertyName) { var propr = GetType().GetProperty(propertyName); var attrs = propr.GetCustomAttributes(typeof(AxDbFieldAttribute), true); return attrs.LastOrDefault() as AxDbFieldAttribute; } - public List GetArxivarAttributes() + public List GetArxivarAttributes() { return ( from attr in ( @@ -162,9 +260,9 @@ select attr ).ToList(); } - public Tm GetValueByAS400Field(string field) + public Tm GetValueByDbField(string field) { - return GetValueBy(field, property => GetArxivarAttribute(property.Name)?.DbField); + return GetValueBy(field, property => GetDbAttribute(property.Name)?.DbField); } public Tm GetValueByAXField(string field) @@ -180,9 +278,9 @@ public Tm GetValueByAXField(string field) { return GetValueByPropertyName(fieldName); } - if (HasAS400Field(fieldName)) + if (HasDbField(fieldName)) { - return GetValueByAS400Field(fieldName); + return GetValueByDbField(fieldName); } if (HasAXField(fieldName)) { @@ -245,6 +343,6 @@ public Dictionary GetPrimaryKeys() return fields; } - #endregion +#endregion } } diff --git a/ACUtils.AXRepository/ArxivarRepository.cs b/ACUtils.AXRepository/ArxivarRepository.cs index 2ccd0a3..3770c72 100644 --- a/ACUtils.AXRepository/ArxivarRepository.cs +++ b/ACUtils.AXRepository/ArxivarRepository.cs @@ -106,7 +106,7 @@ public ArxivarRepository( public ArxivarRepository( string apiUrl, - string managementUrl, + string managementUrl, string workflowUrl, string authToken, ACUtils.ILogger logger = null @@ -187,6 +187,81 @@ public UserInfoDTO UserInfo() #endregion + #region address book + + + /// + /// + /// + /// + /// + /// Possible values: To => 0 | From => 1 | CC => 2 | Senders => 3 + /// + public ACUtils.AXRepository.ArxivarNext.Model.UserProfileDTO GetAddressBookEntry(string codice, int addressBookCategoryId, UserProfileType type = UserProfileType.To) + { + Login(); + + var addressBookApi = new ArxivarNext.Api.AddressBookApi(configuration); + var filter = addressBookApi.AddressBookGetSearchField(); + var select = addressBookApi.AddressBookGetSelectField(); + select.Select("DM_RUBRICA_CODICE"); + select.Select("DM_RUBRICA_AOO"); + select.Select("DM_RUBRICA_CODICE"); + select.Select("ID"); + + var result = addressBookApi.AddressBookPostSearch(new AddressBookSearchCriteriaDTO( + filter: codice, + addressBookCategoryId: addressBookCategoryId, + filterFields: filter, + selectFields: select + )); + + var addressBookId = result.Data.First().Columns.GetValue("ID"); + var addressBook = addressBookApi.AddressBookGetById(addressBookId: addressBookId); + return new ArxivarNext.Model.UserProfileDTO( + id: addressBook.Id, + externalId: addressBook.ExternalCode, + description: addressBook.BusinessName, + docNumber: "-1", + type: (int) type, + contactId: addressBook.Id, + fax: addressBook.Fax, + address: addressBook.Address, + postalCode: addressBook.PostalCode, + contact: "", + job: "", + locality: addressBook.Location, + province: addressBook.Province, + phone: addressBook.PhoneNumber, + mobilePhone: addressBook.CellPhone, + telName: "", + faxName: "", + house: "", + department: "", + reference: "", + office: "", + vat: "", + mail: "", + priority: "N", // addressBook.Priority, + code: null, + email: addressBook.Email, + fiscalCode: addressBook.FiscalCode, + nation: addressBook.Country, + addressBookId: addressBook.Id, + society: "", + officeCode: "", + publicAdministrationCode: "", + pecAddressBook: "", + feaEnabled: false, + feaExpireDate: null, + firstName: "", + lastName: "", + pec: "" + ); + + + } + #endregion #region auth private void Login() @@ -232,15 +307,18 @@ public void DeleteWorkflow(int? processId) #region profile - search - public List Search(AXModel model, bool eliminato = false) where T : AXModel, new() + public List Search(AXModel model, bool eliminato = false) where T : AXModel, new() { var searchValues = model.GetPrimaryKeys(); var classeDoc = model.GetArxivarAttribute().DocumentType; - return Search( + var result = Search( classeDoc: classeDoc, searchValues: searchValues, eliminato: eliminato ); + + var profiles = result.Select(s => GetProfile(s.Columns.GetValue("DOCNUMBER"))).ToList(); + return profiles; } public List Search(string classeDoc, Dictionary searchValues = null, bool eliminato = false, bool selectAll = false) { @@ -358,16 +436,18 @@ public int GetDocumentNumber(string classeDoc, Dictionary search /// /// se il documento è sottoposto a workflow è necessario passare anche il numero di task /// se il documento è sottoposto a workflow è necessario passare anche il numero di processo + /// + /// /// public long? UpdateProfile(AXModel model, int? taskid = null, int? procdocid = null, int checkInOption = 0, bool killWorkflow = false) where T : AXModel, new() { Login(); List bufferIds = new List(); - var docValues = Search(model).First(); - var workflow = System.Convert.ToInt64(docValues.Columns.Get("WORKFLOW").Value ?? 0); + var doc = Search(model).First(); + var workflow = System.Convert.ToInt64(doc.Workflow ?? false); //var docNumber = model.DOCNUMBER ?? GetDocumentNumber(model); - var docNumber = model.DOCNUMBER ?? (int)docValues.Columns.Get("DOCNUMBER").Value; + var docNumber = model.DOCNUMBER ?? doc.DOCNUMBER; if (workflow == 1 && killWorkflow) { @@ -404,8 +484,10 @@ public int GetDocumentNumber(string classeDoc, Dictionary search profileDto.Fields.SetField("DataDoc", model.DataDoc.Value); } - if (!string.IsNullOrEmpty(model.GetArxivarAttribute().Stato)) - profileDto.Fields.SetState(model.GetArxivarAttribute().Stato); + if (!string.IsNullOrEmpty(model.STATO)) + { + profileDto.Fields.SetState(model.STATO); + } /* try @@ -435,7 +517,7 @@ public int GetDocumentNumber(string classeDoc, Dictionary search //var select = taskWorkApi.TaskWorkGetDefaultSelect(); //var tasks = taskWorkApi.TaskWorkGetActiveTaskWork(select, System.Convert.ToInt32(docNumber)); //var taskWork = taskWorkApi.TaskWorkGetTaskWorkById(taskid); - checkInOutApi.CheckInOutCheckOutForTask(processDocId: procdocid, taskWorkId: taskid); + //checkInOutApi.CheckInOutCheckOutForTask(processDocId: procdocid, taskWorkId: taskid); } else { @@ -455,8 +537,8 @@ public int GetDocumentNumber(string classeDoc, Dictionary search checkInOutApi.CheckInOutCheckIn( docnumber: System.Convert.ToInt32(docNumber), fileId: bufferIds.First(), - checkInOption, - true + option: checkInOption, + undoCheckOut: true ); } @@ -529,7 +611,7 @@ public bool HardDeleteProfile(int docNumber) } else { - return System.Convert.ToInt32(search.First().Columns.GetValue("DOCNUMBER")); + return System.Convert.ToInt32(search.First().DOCNUMBER); } } } @@ -586,22 +668,39 @@ public bool HardDeleteProfile(int docNumber) profileDto.Fields.SetField("DataDoc", model.DataDoc.Value); } - try + if (!string.IsNullOrEmpty(model.User)) + profileDto.Fields.SetFromField(GetUserAddressBookEntry(model.User, 1)); + + if (!string.IsNullOrEmpty(model.MittenteCodiceRubrica)) { - if (!string.IsNullOrEmpty(model.User)) - profileDto.Fields.SetFromField(GetUserAddressBookEntry(model.User, 1)); + profileDto.Fields.SetFromField(GetAddressBookEntry( + model.MittenteCodiceRubrica, + model.MittenteIdRubrica.GetValueOrDefault(), + type: UserProfileType.From + )); } - catch (Exception e) - { - Console.WriteLine(e); + if (model.DestinatariCodiceRubrica != null) + { + foreach (var destinatario in model.DestinatariCodiceRubrica) + { + profileDto.Fields.SetToField(GetAddressBookEntry( + destinatario, + model.DestinatariIdRubrica.GetValueOrDefault(), + type: UserProfileType.To + )); + } } + foreach (var field in model.GetArxivarFields()) { profileDto.Fields.SetField(field.Key, field.Value); } + var stato = model.STATO ?? statesApi.StatesGet(classeDoc.Id).First().Id; + profileDto.Fields.SetState(stato); + var newProfile = new ProfileDTO() { Fields = profileDto.Fields, @@ -808,7 +907,7 @@ public long Task_GetUserIdOfTaskId(int processId, int taskWorkId) #region fascioli - public List GetFascicoloDocuments(int id) + public List GetFascicoloDocuments(int id) { Login(); @@ -816,7 +915,7 @@ public long Task_GetUserIdOfTaskId(int processId, int taskWorkId) var searchApi = new ArxivarNext.Api.SearchesApi(configuration); var select = searchApi.SearchesGetSelect(); select.Fields.Select("CLASSEDOC"); - return foldersApi.FoldersGetDocumentsById(select: select, id: id); + return foldersApi.FoldersGetDocumentsById(id, select); } public int GetFascicoloLevel(int id) @@ -827,13 +926,14 @@ public int GetFascicoloLevel(int id) return folderInfo.FullPath.Count(f => f == '\\'); } - public List GetFascoloFiglio(int id, string name) + public List GetFascoloFiglio(int id, string name) { Login(); var foldersApi = new ArxivarNext.Api.FoldersApi(configuration); return foldersApi.FoldersFindInFolderByName(id, name); } + public List FascicoliGetByDocnumber(int docnumber) { Login(); @@ -842,44 +942,73 @@ public List FascicoliGetByDocnumber(int docnumber) return folders.Where(f => f.Id.HasValue).Select(f => f.Id.Value).ToList(); } - public void FascicoliMoveToSubfolder(int parent_folder, string subfoldername, int docnumber) + public int FascicoliFolderExists(int parentFolder, string subfolderName) { Login(); var foldersApi = new ArxivarNext.Api.FoldersApi(configuration); - var folders = foldersApi.FoldersGetByParentId(parent_folder); + var folders = foldersApi.FoldersGetByParentId(parentFolder); - var folderSearch = folders.Where(f => f.Name.ToLower().Equals(subfoldername.ToLower())); - var folder_exists = folderSearch.Any(); - - var folder_id = 0; - - if (!folder_exists) + var folderSearch = folders.Where(f => f.Name.ToLower().Equals(subfolderName.ToLower())); + if (folderSearch.Any()) { - var newfodler = foldersApi.FoldersNew(parentId: parent_folder, name: subfoldername); - folder_id = newfodler.Id.Value; + return folderSearch.First().Id.GetValueOrDefault(); } else { - folder_id = folderSearch.First().Id.Value; + return 0; + } + } + + public int FascicoliCreateFolder(int parentFolder, string subfodlerName) + { + Login(); + var foldersApi = new ArxivarNext.Api.FoldersApi(configuration); + int subfodler = FascicoliFolderExists(parentFolder, subfodlerName); + if (subfodler == 0) // se non esiste + { + var newfodler = foldersApi.FoldersNew(parentFolder, subfodlerName); + subfodler = newfodler.Id.Value; } + return subfodler; + } + + public void FascicoliMoveToFolder(int folderId, int docnumber) + { + Login(); + var foldersApi = new ArxivarNext.Api.FoldersApi(configuration); + foldersApi.FoldersInsertDocnumbers(folderId, new List() { docnumber }); + } + + public int FascicoliMoveToSubfolder(int parentFolder, string subfolderName, int docnumber) + { + Login(); + var foldersApi = new ArxivarNext.Api.FoldersApi(configuration); + + var folders = foldersApi.FoldersGetByParentId(parentFolder); + + var folderSearch = folders.Where(f => f.Name.ToLower().Equals(subfolderName.ToLower())); + var folder_exists = folderSearch.Any(); + + var folderId = FascicoliCreateFolder(parentFolder, subfolderName); // rimuovi dalla cartella precedente try { - foldersApi.FoldersRemoveDocumentsInFolder(docnumbers: new List() { docnumber }, id: parent_folder); + foldersApi.FoldersRemoveDocumentsInFolder(parentFolder, new List() { docnumber }); } catch { } // rimuove se già presente try { - foldersApi.FoldersRemoveDocumentsInFolder(docnumbers: new List() { docnumber }, id: folder_id); + foldersApi.FoldersRemoveDocumentsInFolder(folderId, new List() { docnumber }); } catch { } // aggiungi alla cartella di destinazione - foldersApi.FoldersInsertDocnumbers(docnumbers: new List() { docnumber }, id: folder_id); + FascicoliMoveToFolder(folderId, docnumber); + return folderId; } #endregion diff --git a/ACUtils.AXRepository/AxExt.cs b/ACUtils.AXRepository/AxExt.cs index d13fc27..6f1b34d 100644 --- a/ACUtils.AXRepository/AxExt.cs +++ b/ACUtils.AXRepository/AxExt.cs @@ -164,6 +164,10 @@ public static void SetField(this List fields, string name, object { (field as AdditionalFieldMultivalueDTO).Value = (List)Convert.ChangeType(value, typeof(List)); } + else if (field?.ClassName == "FromFieldDTO") + { + (field as FromFieldDTO).Value = (UserProfileDTO)value; + } else { throw new Exception($"'{name}' - type '{field?.ClassName}': not permitted "); @@ -175,15 +179,16 @@ public static void SetToField(this List fields, UserProfileDTO val var field = ((ToFieldDTO)fields.FirstOrDefault(i => i.Name.Equals("To", StringComparison.CurrentCultureIgnoreCase) )); - field.Value = new List() { value }; + if (field.Value == null) + { + field.Value = new List(); + } + field.Value.Add(value); } public static void SetFromField(this List fields, UserProfileDTO value) { - var field = ((FromFieldDTO)fields.FirstOrDefault(i => - i.Name.Equals("From", StringComparison.CurrentCultureIgnoreCase) - )); - field.Value = value; + fields.SetField("From", value); } @@ -226,7 +231,14 @@ public static ColumnSearchResult Get(this List results, stri } public static T GetValue(this List results, string name) { - return (T)results.Get(name).Value; + try + { + return (T)results.Get(name).Value; + } + catch + { + return (T)System.Convert.ChangeType(results.Get(name).Value, typeof(T)); + } } public static List Select(this List fields, string name) @@ -235,5 +247,10 @@ public static List Select(this List Select(this List fields, string name) + { + fields.First(i => i.KeyField.Equals(name, StringComparison.CurrentCultureIgnoreCase)).Selected = true; + return fields; + } } } diff --git a/ACUtils.AXRepository/UserProfileType.cs b/ACUtils.AXRepository/UserProfileType.cs new file mode 100644 index 0000000..b507011 --- /dev/null +++ b/ACUtils.AXRepository/UserProfileType.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ACUtils.AXRepository +{ + public enum UserProfileType : int + { + To = 0, + From = 1, + Cc = 2, + Senders = 3 + } +} diff --git a/Tests/AXTests.cs b/Tests/AXTests.cs new file mode 100644 index 0000000..e51b5c9 --- /dev/null +++ b/Tests/AXTests.cs @@ -0,0 +1,18 @@ +using System; +using System.Linq; + +using ACUtils; + +using NUnit.Framework; +namespace Tests +{ + [TestFixture] + public class AXTests + { + [Test] + public void TestProfileGet() + { + + } + } +} diff --git a/Tests/Stuff/AXDoc.cs b/Tests/Stuff/AXDoc.cs new file mode 100644 index 0000000..8f5ed45 --- /dev/null +++ b/Tests/Stuff/AXDoc.cs @@ -0,0 +1,13 @@ +namespace Tests.Stuff +{ + [ACUtils.AXRepository.Attributes.AxClass(document_type: "DEV.TEST", description:"Documento di test", stato:"TEST")] + public class AXDoc: ACUtils.AXRepository.AXModel + { + + [ACUtils.AXRepository.Attributes.AxField(ax_field: "DOCNUMBER", key: 1)] + public override int? DOCNUMBER { get; set; } + + [ACUtils.AXRepository.Attributes.AxField(ax_field:"TESTO16_5")] + public string Prova { get; set; } + } +} diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 40ef8e8..2b6fcce 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -45,6 +45,7 @@ + @@ -54,8 +55,13 @@ + + + {9315e643-f70a-4582-8b4e-ed86cd458a08} + ACUtils.AXRepository + {df92e0a8-bf71-45f6-89d8-397e6b8f2a95} ACUtils.DotNetUtils diff --git a/push.bat b/push.bat deleted file mode 100644 index aea1295..0000000 --- a/push.bat +++ /dev/null @@ -1 +0,0 @@ -nuget push dist\*.134.nupkg oy2fcz4sx5a46vto5xnqgszddnc73pnexanc65sccfb2ze -Source "https://api.nuget.org/v3/index.json" \ No newline at end of file