diff --git a/console_spo_utils/Constants/Fields.cs b/console_spo_utils/Constants/Fields.cs index 6dc79a1..9ad95bd 100644 --- a/console_spo_utils/Constants/Fields.cs +++ b/console_spo_utils/Constants/Fields.cs @@ -2,19 +2,50 @@ public static class Fields { - public static string[] SubProject - { - get - { - return new string[] { "Item", "Codice Articolo", "Descrizione Articolo", "Matricola Macchina" }; - } - } - public static string[] SiteFields { get { - return new[] { "ID Progetto", "Cliente", "Causale" }; + return new[] + { + "ID Progetto", + "Cliente", + "Causale" + }; + } + } + + public static string[] SubSiteProject + { + get + { + return new string[] + { + "Item", + "Codice Articolo", + "Descrizione Articolo", + "Matricola Macchina" + }; + } + } + + public static string[] SubProject + { + get + { + return new string[] + { + "Type", + "Name", + "Description", + "Item", + "Codice Articolo", + "Descrizione Articolo", + "Matricola Macchina", + "Modified", + "Editor", + "Version" + }; } } diff --git a/console_spo_utils/Constants/Folders.cs b/console_spo_utils/Constants/Folders.cs index 36269eb..8ea66e3 100644 --- a/console_spo_utils/Constants/Folders.cs +++ b/console_spo_utils/Constants/Folders.cs @@ -57,4 +57,24 @@ public static class Folders }; } } + + public static IEnumerable OfferDocSet + { + get + { + string rev = "Rev. 1"; //TODO: Definire revisione + return new string[] + { + rev, + $"{rev}/01_Costificazione", + $"{rev}/02_Offerta", + $"{rev}/03_Meeting", + $"{rev}/04_Corrispondenza", + $"{rev}/08_Specifiche_Tecniche", + $"{rev}/10_Fornitori", + $"{rev}/11_Documenti_Tecnici", + $"{rev}/14_Foto" + }; + } + } } \ No newline at end of file diff --git a/console_spo_utils/Fakes/Repositories/FakeQuotationSettingRepository.cs b/console_spo_utils/Fakes/Repositories/FakeQuotationSettingRepository.cs new file mode 100644 index 0000000..45f6ae3 --- /dev/null +++ b/console_spo_utils/Fakes/Repositories/FakeQuotationSettingRepository.cs @@ -0,0 +1,25 @@ +using console_spo_utils.Interfaces.Repositories; +namespace console_spo_utils.Fakes.Repositories; + +public class FakeQuotationSettingRepository:IQuotationRepository +{ + public string DefaultIdQuotation(string quotationName) + { + return quotationName; + } + + public string DefaultQuotationName(string quotationName) + { + return "Marchiol"; + } + + public string DefaultQuotationReason(string quotationName) + { + return "02 VENDITA RICAMBI"; + } + + public string DefaultAuthors(string quotationName) + { + return "User"; + } +} \ No newline at end of file diff --git a/console_spo_utils/Fakes/Repositories/FakeSubProjectRepository.cs b/console_spo_utils/Fakes/Repositories/FakeSubProjectRepository.cs index 16ac57f..0167cdb 100644 --- a/console_spo_utils/Fakes/Repositories/FakeSubProjectRepository.cs +++ b/console_spo_utils/Fakes/Repositories/FakeSubProjectRepository.cs @@ -14,4 +14,29 @@ public class FakeSubProjectRepository:ISubProjectRepository $"{projName}-004", }; } + + public string DefaultDescription(string projName) + { + return "AutomationTest c.s."; + } + + public string DefaultItem(string projName) + { + return "Coclea"; + } + + public string DefaultItemCode(string projName) + { + return "C84M70"; + } + + public string DefaultItemDescription(string projName) + { + return "7m con le piastrelle"; + } + + public string DefaultSerialNumber(string projName) + { + return "S/N 000000988948e"; + } } \ No newline at end of file diff --git a/console_spo_utils/Interfaces/Repositories/IQuotationRepository.cs b/console_spo_utils/Interfaces/Repositories/IQuotationRepository.cs new file mode 100644 index 0000000..723e695 --- /dev/null +++ b/console_spo_utils/Interfaces/Repositories/IQuotationRepository.cs @@ -0,0 +1,11 @@ + + +namespace console_spo_utils.Interfaces.Repositories; + +public interface IQuotationRepository +{ + public string DefaultIdQuotation(string quotationName); + public string DefaultQuotationName(string quotationName); + public string DefaultQuotationReason(string quotationName); + public string DefaultAuthors(string quotationName); +} \ No newline at end of file diff --git a/console_spo_utils/Interfaces/Repositories/ISubProjectRepository.cs b/console_spo_utils/Interfaces/Repositories/ISubProjectRepository.cs index b1f22dd..e1dee69 100644 --- a/console_spo_utils/Interfaces/Repositories/ISubProjectRepository.cs +++ b/console_spo_utils/Interfaces/Repositories/ISubProjectRepository.cs @@ -3,4 +3,9 @@ public interface ISubProjectRepository { public List GetFromProject(string projName); + public string DefaultDescription(string projName); + public string DefaultItem(string projName); + public string DefaultItemCode(string projName); + public string DefaultItemDescription(string projName); + public string DefaultSerialNumber(string projName); } \ No newline at end of file diff --git a/console_spo_utils/Interfaces/Services/ISharePointCustomOperation.cs b/console_spo_utils/Interfaces/Services/ISharePointCustomOperation.cs index 12e6883..49b85bd 100644 --- a/console_spo_utils/Interfaces/Services/ISharePointCustomOperation.cs +++ b/console_spo_utils/Interfaces/Services/ISharePointCustomOperation.cs @@ -11,5 +11,4 @@ public interface ISharePointCustomOperation bool SiteFeaturesExist(ClientContext ctx, string featureName); void PalCustomField(ClientContext ctx, PalFieldType et); public bool ListContentTypeExist(ClientContext ctx, string listTitle, string contentTypeName); - } \ No newline at end of file diff --git a/console_spo_utils/Interfaces/Services/ISiteOptions.cs b/console_spo_utils/Interfaces/Services/ISiteOptions.cs index ff0a41c..a1c5e24 100644 --- a/console_spo_utils/Interfaces/Services/ISiteOptions.cs +++ b/console_spo_utils/Interfaces/Services/ISiteOptions.cs @@ -6,15 +6,10 @@ public interface ISiteOptions { public string TokenEndpoint { get; } public string DefaultAadAppId { get; } - public Uri GetProjectSite(); - public string GetProjTenant(); - public string GetUser(); - public SecureString GetPassword(); - public string GetProjListTitle(); public Uri GetSubProjSite(string projName); string GetQuotationTenant(); diff --git a/console_spo_utils/Interfaces/Services/ISiteService.cs b/console_spo_utils/Interfaces/Services/ISiteService.cs index dd4e584..a5e54e9 100644 --- a/console_spo_utils/Interfaces/Services/ISiteService.cs +++ b/console_spo_utils/Interfaces/Services/ISiteService.cs @@ -3,7 +3,6 @@ public interface ISiteService { public bool CreateProjectSiteIfNotExists(); - public bool CreateSubSiteIfNotExists(string projName); - public bool CreateQuotationSiteIfNotExists(); + public bool CreateQuotationSiteIfNotExists(string quotationName); } \ No newline at end of file diff --git a/console_spo_utils/Model/XmlFieldsModel.cs b/console_spo_utils/Model/XmlFieldsModel.cs index b18bcea..2970aed 100644 --- a/console_spo_utils/Model/XmlFieldsModel.cs +++ b/console_spo_utils/Model/XmlFieldsModel.cs @@ -3,7 +3,7 @@ namespace console_spo_utils.Model; [XmlRoot(ElementName = "Field")] -public class XmlFieldsModel +public class XmlFieldsModel //TODO ha senso ? se come funziona? { [XmlAttribute(AttributeName = "Name")] public string Name { get; set; } diff --git a/console_spo_utils/Program.cs b/console_spo_utils/Program.cs index 0e9fdef..a3daa00 100644 --- a/console_spo_utils/Program.cs +++ b/console_spo_utils/Program.cs @@ -8,13 +8,6 @@ using Microsoft.Extensions.Hosting; namespace console_spo_utils { - #region External Variable - // TODO: Import variable from PP [C:\Sources\VS\web_portal\webapp_italsort\DataItalsortGestionale\ProjTable.cs] - - - - #endregion - public static class Program { public static async Task Main(string[] args) @@ -22,10 +15,10 @@ namespace console_spo_utils var host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { - services.AddSharePointExtensions(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddHostedService(); }) diff --git a/console_spo_utils/Repositories/SubProjectRepository.cs b/console_spo_utils/Repositories/SubProjectRepository.cs deleted file mode 100644 index e16de66..0000000 --- a/console_spo_utils/Repositories/SubProjectRepository.cs +++ /dev/null @@ -1,11 +0,0 @@ -using console_spo_utils.Interfaces.Repositories; - -namespace console_spo_utils.Repositories; - -public class SubProjectRepository:ISubProjectRepository -{ - public List GetFromProject(string projName) - { - return new(); - } -} \ No newline at end of file diff --git a/console_spo_utils/Services/AutenticationManager.cs b/console_spo_utils/Services/AutenticationManager.cs index 2b5cfb8..0fa599a 100644 --- a/console_spo_utils/Services/AutenticationManager.cs +++ b/console_spo_utils/Services/AutenticationManager.cs @@ -22,19 +22,14 @@ namespace console_spo_utils.Services this.siteOptions = siteOptions; } - private static readonly HttpClient HttpClient = new(); - - private static readonly SemaphoreSlim SemaphoreSlimTokens = new(1); private AutoResetEvent tokenResetEvent = null; private readonly ConcurrentDictionary tokenCache = new(); private bool disposedValue; #region CSOM - - public ClientContext GetContext(Uri web) { var context = new ClientContext(web); diff --git a/console_spo_utils/Services/ProjectDocLibraryService.cs b/console_spo_utils/Services/ProjectDocLibraryService.cs index 08f8f19..dbe747a 100644 --- a/console_spo_utils/Services/ProjectDocLibraryService.cs +++ b/console_spo_utils/Services/ProjectDocLibraryService.cs @@ -19,7 +19,7 @@ public class ProjectDocLibraryService : IProjectDocLibraryService } - public void Create(string ssProjectTitle, ClientContext ctx) //TODO: Da testare + public void Create(string ssProjectTitle, ClientContext ctx) { try { diff --git a/console_spo_utils/Services/ProjectYearService.cs b/console_spo_utils/Services/ProjectYearService.cs index d883e0b..0696cb3 100644 --- a/console_spo_utils/Services/ProjectYearService.cs +++ b/console_spo_utils/Services/ProjectYearService.cs @@ -1,4 +1,5 @@ -using console_spo_utils.Interfaces.Services; +using console_spo_utils.Constants; +using console_spo_utils.Interfaces.Services; using Microsoft.Extensions.Logging; using Microsoft.SharePoint.Client; @@ -60,9 +61,7 @@ public class ProjectYearService:IProjectYearService ctx.ExecuteQuery(); - string[] fieldName = { "ID Progetto", "Cliente", "Causale" }; - - foreach (var fn in fieldName) + foreach (var fn in Fields.SiteFields) { var Fields = siteField.Fields.GetByTitle(fn); list.Fields.Add(Fields); @@ -87,7 +86,7 @@ public class ProjectYearService:IProjectYearService viewCreation.Title = listTitle; viewCreation.ViewTypeKind = ViewType.None; viewCreation.ColumnWidth = "350"; - viewCreation.ViewFields = new string[] { "ID Progetto", "Cliente", "Causale" }; + viewCreation.ViewFields = Fields.SiteFields; var view = views.Add(viewCreation); diff --git a/console_spo_utils/Services/QuotationDocSetService.cs b/console_spo_utils/Services/QuotationDocSetService.cs index 2d23b2b..2c213fd 100644 --- a/console_spo_utils/Services/QuotationDocSetService.cs +++ b/console_spo_utils/Services/QuotationDocSetService.cs @@ -1,4 +1,6 @@ -using console_spo_utils.Interfaces.Services; +using console_spo_utils.Constants; +using console_spo_utils.Interfaces.Repositories; +using console_spo_utils.Interfaces.Services; using Microsoft.Extensions.Logging; using Microsoft.SharePoint.Client; using Microsoft.SharePoint.Client.DocumentSet; @@ -10,14 +12,17 @@ public class QuotationDocSetService : IQuotationDocSetService private readonly ISharePointCustomOperation cpt; private readonly ILogger logger; private readonly IOneNoteService oneNoteService; + private readonly IQuotationRepository quotationRepository; public QuotationDocSetService(ISharePointCustomOperation cpt, ILogger logger, - IOneNoteService oneNoteService) + IOneNoteService oneNoteService, + IQuotationRepository quotationRepository) { this.cpt = cpt; this.logger = logger; this.oneNoteService = oneNoteService; + this.quotationRepository = quotationRepository; } public void Create(string quotationName, string docLibraryName, string tenantName, ClientContext ctx) @@ -70,10 +75,10 @@ public class QuotationDocSetService : IQuotationDocSetService var dsItem = list.RootFolder.Folders.GetByUrl(quotationName).ListItemAllFields; - dsItem["PAL_ID_Quotation"] = "valueItemCode"; - dsItem["PAL_Quotation_Name"] = "valueItemDescription"; - dsItem["PAL_Quotation_Reason"] = "NC NON CONFORMITÁ"; - dsItem["PAL_Authors"] = "Test"; + dsItem["PAL_ID_Quotation"] = quotationRepository.DefaultIdQuotation(quotationName); + dsItem["PAL_Quotation_Name"] = quotationRepository.DefaultQuotationName(quotationName); + dsItem["PAL_Quotation_Reason"] = quotationRepository.DefaultQuotationReason(quotationName); + dsItem["PAL_Authors"] = quotationRepository.DefaultAuthors(quotationName); dsItem.Update(); ctx.ExecuteQuery(); @@ -84,14 +89,7 @@ public class QuotationDocSetService : IQuotationDocSetService #region Quotation Folder - string rev = "Rev. 1"; - string[] folderName = - { - rev, $"{rev}/01_Costificazione", $"{rev}/02_Offerta", $"{rev}/03_Meeting", $"{rev}/04_Corrispondenza", - $"{rev}/08_Specifiche_Tecniche", $"{rev}/10_Fornitori", $"{rev}/11_Documenti_Tecnici", $"{rev}/14_Foto" - }; - - foreach (string name in folderName) + foreach (var name in Folders.OfferDocSet) { Console.WriteLine($"La sotto cartella {name} verrà creata in {quotationName}"); var rPath = ResourcePath.FromDecodedUrl($"{quotationName}/{name}"); diff --git a/console_spo_utils/Services/OfferService.cs b/console_spo_utils/Services/QuotationService.cs similarity index 100% rename from console_spo_utils/Services/OfferService.cs rename to console_spo_utils/Services/QuotationService.cs diff --git a/console_spo_utils/Services/SharePointCustomOperation.cs b/console_spo_utils/Services/SharePointCustomOperation.cs index e647080..e2fdea7 100644 --- a/console_spo_utils/Services/SharePointCustomOperation.cs +++ b/console_spo_utils/Services/SharePointCustomOperation.cs @@ -39,7 +39,7 @@ namespace console_spo_utils.Services } catch (Exception ex) { - logger.LogError("Site Exists", ex); + logger.LogWarning("Site Exists", ex); return false; } @@ -55,7 +55,7 @@ namespace console_spo_utils.Services } catch (Exception ex) { - logger.LogError("List Exist", ex); + logger.LogWarning("List Exist", ex); return false; } @@ -77,7 +77,7 @@ namespace console_spo_utils.Services } catch (Exception ex) { - logger.LogError("Folder Exists Inside List", ex); + logger.LogWarning("Folder Exists Inside List", ex); return false; } diff --git a/console_spo_utils/Services/SharePointStructureBuilderService.cs b/console_spo_utils/Services/SharePointStructureBuilderService.cs index b821323..627ab54 100644 --- a/console_spo_utils/Services/SharePointStructureBuilderService.cs +++ b/console_spo_utils/Services/SharePointStructureBuilderService.cs @@ -50,7 +50,7 @@ public class SharePointStructureBuilderService : ISharePointStructureBuilder public bool BuildQuotation(string quotationName) { - var siteBuildResult = siteService.CreateQuotationSiteIfNotExists(); + var siteBuildResult = siteService.CreateQuotationSiteIfNotExists(quotationName); if (!siteBuildResult) { throw new Exception($"Impossibile to build site"); diff --git a/console_spo_utils/Services/SiteOptions.cs b/console_spo_utils/Services/SiteOptions.cs index e538a6f..4395ff8 100644 --- a/console_spo_utils/Services/SiteOptions.cs +++ b/console_spo_utils/Services/SiteOptions.cs @@ -17,7 +17,7 @@ public class SiteOptions : ISiteOptions private static int GetYear() { - return DateTime.Today.Year +1; + return DateTime.Today.Year; } public string GetProjTenant() diff --git a/console_spo_utils/Services/SiteService.cs b/console_spo_utils/Services/SiteService.cs index 496b5c0..094785e 100644 --- a/console_spo_utils/Services/SiteService.cs +++ b/console_spo_utils/Services/SiteService.cs @@ -108,7 +108,7 @@ public class SiteService : ISiteService return true; } - public bool CreateQuotationSiteIfNotExists() + public bool CreateQuotationSiteIfNotExists(string quotationName) { try { @@ -130,12 +130,12 @@ public class SiteService : ISiteService } - private void CreateProjectListEntry(string projName, ClientContext ctx) //TODO: PP var + private void CreateProjectListEntry(string projName, ClientContext ctx) { try { var listTitle = siteOptions.GetProjListTitle(); - var tenant = siteOptions.GetProjTenant().Replace(" ",""); + var tenant = siteOptions.GetProjTenant().Replace(" ",string.Empty); var list = ctx.Web.Lists.GetByTitle(listTitle); var itemCreateInfo = new ListItemCreationInformation(); diff --git a/console_spo_utils/Services/SubProjectBuilderService.cs b/console_spo_utils/Services/SubProjectBuilderService.cs index 9c9fa24..05c3222 100644 --- a/console_spo_utils/Services/SubProjectBuilderService.cs +++ b/console_spo_utils/Services/SubProjectBuilderService.cs @@ -1,4 +1,5 @@ using console_spo_utils.Constants; +using console_spo_utils.Interfaces.Repositories; using console_spo_utils.Interfaces.Services; using Microsoft.Extensions.Logging; using Microsoft.SharePoint.Client.DocumentSet; @@ -11,16 +12,19 @@ public class SubProjectBuilderService : ISubProjectBuilderService private readonly ISiteOptions siteOptions; private readonly ISharePointCustomOperation cpt; private readonly ISharePointAuthenticationManager authMgr; + private readonly ISubProjectRepository subProjectRepository; private readonly ILogger logger; - public SubProjectBuilderService(ISiteOptions siteOptions - , ISharePointCustomOperation cpt - , ISharePointAuthenticationManager authMgr, + public SubProjectBuilderService(ISiteOptions siteOptions, + ISharePointCustomOperation cpt, + ISharePointAuthenticationManager authMgr, + ISubProjectRepository subProjectRepository, ILogger logger) { this.siteOptions = siteOptions; this.cpt = cpt; this.authMgr = authMgr; + this.subProjectRepository = subProjectRepository; this.logger = logger; } @@ -81,11 +85,11 @@ public class SubProjectBuilderService : ISubProjectBuilderService var dsItem = list.RootFolder.Folders.GetByUrl(spt).ListItemAllFields; - dsItem["_ExtendedDescription"] = "valueDescription"; - dsItem["PAL_Item"] = "valueItem"; - dsItem["PAL_ItemCode"] = "valueItemCode"; - dsItem["PAL_ItemDescription"] = "valueItemDescription"; - dsItem["PAL_SerialNumber"] = "valueSerialNumber"; + dsItem["_ExtendedDescription"] = subProjectRepository.DefaultDescription(projName); + dsItem["PAL_Item"] = subProjectRepository.DefaultItem(projName); + dsItem["PAL_ItemCode"] = subProjectRepository.DefaultItemCode(projName); + dsItem["PAL_ItemDescription"] = subProjectRepository.DefaultItemDescription(projName); + dsItem["PAL_SerialNumber"] = subProjectRepository.DefaultSerialNumber(projName); dsItem.Update(); ctx.ExecuteQuery(); @@ -96,8 +100,6 @@ public class SubProjectBuilderService : ISubProjectBuilderService #region SubProject Folder - - foreach (var name in Folders.SubProjectDocSet) { Console.WriteLine($"La sotto cartella {name} verrà creata in {spt}"); diff --git a/console_spo_utils/Services/SubSiteService.cs b/console_spo_utils/Services/SubSiteService.cs index 7abd617..d1e4047 100644 --- a/console_spo_utils/Services/SubSiteService.cs +++ b/console_spo_utils/Services/SubSiteService.cs @@ -77,7 +77,7 @@ public class SubSiteService : ISubSiteService Title = listTitle, ViewTypeKind = ViewType.None, ColumnWidth = "350", - ViewFields = new string[] { "Type", "Name", "Description", "Item", "Codice Articolo", "Descrizione Articolo", "Matricola Macchina", "Modified", "Editor", "Version", } + ViewFields = Fields.SubProject }; var view = views.Add(viewCreation); @@ -104,7 +104,7 @@ public class SubSiteService : ISubSiteService private static void AddFieldsToSubProj(Web siteField, List list, ClientContext ctx) { - foreach (var fieldName in Fields.SubProject) + foreach (var fieldName in Fields.SubSiteProject) { var fields = siteField.Fields.GetByTitle(fieldName); list.Fields.Add(fields); diff --git a/console_spo_utils/Workers/MainWorker.cs b/console_spo_utils/Workers/MainWorker.cs index a5afb69..29bf23e 100644 --- a/console_spo_utils/Workers/MainWorker.cs +++ b/console_spo_utils/Workers/MainWorker.cs @@ -20,46 +20,52 @@ namespace console_spo_utils.Workers protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - var buildResult = structureBuilder.BuildProject("CT2025"); + var buildProjectsResult = structureBuilder.BuildProject("CT0019"); - if (!buildResult) + if (!buildProjectsResult) { logger.LogError("Impossible to create structure"); return; } + var buildQuotationResult = structureBuilder.BuildQuotation("OF0003"); - - - //#region SPO Credential - //var siteCollection = "https://italsortbuttrio.sharepoint.com"; - //var svcUser = "svcItsSharePointAdmin@italsort.com"; - //var svcUserPsw = new NetworkCredential("", "$O,D1XBp1O5.OdjZt86#a=").SecurePassword; - //#endregion - - //#region General Variable - //var year = DateTime.Now.Year.ToString(); - //var tenantName = $"Commesse {year}"; - //var projectsYear = tenantName.Replace(" ", string.Empty); - //var listTitle = $"Lista {tenantName}"; - //var ssProjectTitle = "CT0018"; - //string[] ssSubProjectTitle = { $"{ssProjectTitle}-0001", $"{ssProjectTitle}-0002", $"{ssProjectTitle}-0003" }; - - //var site = new Uri($"{siteCollection}/sites/{projectsYear}"); - //var subSite = new Uri($"{siteCollection}/sites/{projectsYear}/{ssProjectTitle}"); - //#endregion - - //#region Create - //projectSiteService.CreateIfNotExists(listTitle, tenantName, svcUser, site, svcUserPsw); - //projectService.Create(siteCollection, svcUser, svcUserPsw, ssProjectTitle); - //subProjectService.Create(siteCollection, svcUser, svcUserPsw,ssProjectTitle, ssSubProjectTitle); - //#endregion - - //#region Create - //offerService.Create(siteCollection, svcUser, svcUserPsw); - //#endregion - - //return Task.CompletedTask; + if (!buildQuotationResult) + { + logger.LogError("Impossible to create structure"); + return; + } } } } + + +//#region SPO Credential +//var siteCollection = "https://italsortbuttrio.sharepoint.com"; +//var svcUser = "svcItsSharePointAdmin@italsort.com"; +//var svcUserPsw = new NetworkCredential("", "$O,D1XBp1O5.OdjZt86#a=").SecurePassword; +//#endregion + +//#region General Variable +//var year = DateTime.Now.Year.ToString(); +//var tenantName = $"Commesse {year}"; +//var projectsYear = tenantName.Replace(" ", string.Empty); +//var listTitle = $"Lista {tenantName}"; +//var ssProjectTitle = "CT0018"; +//string[] ssSubProjectTitle = { $"{ssProjectTitle}-0001", $"{ssProjectTitle}-0002", $"{ssProjectTitle}-0003" }; + +//var site = new Uri($"{siteCollection}/sites/{projectsYear}"); +//var subSite = new Uri($"{siteCollection}/sites/{projectsYear}/{ssProjectTitle}"); +//#endregion + +//#region Create +//projectSiteService.CreateIfNotExists(listTitle, tenantName, svcUser, site, svcUserPsw); +//projectService.Create(siteCollection, svcUser, svcUserPsw, ssProjectTitle); +//subProjectService.Create(siteCollection, svcUser, svcUserPsw,ssProjectTitle, ssSubProjectTitle); +//#endregion + +//#region Create +//offerService.Create(siteCollection, svcUser, svcUserPsw); +//#endregion + +//return Task.CompletedTask; \ No newline at end of file