Files
console_spo_utils/library_spo_utils/Services/SubProjectBuilderService.cs
T
2023-06-21 10:38:57 +02:00

137 lines
5.1 KiB
C#

using library_spo_utils.Constants;
using library_spo_utils.Enums;
using library_spo_utils.Interfaces.Repositories;
using library_spo_utils.Interfaces.Services;
using Microsoft.Extensions.Logging;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.DocumentSet;
namespace library_spo_utils.Services;
internal class SubProjectBuilderService : ISubProjectBuilderService
{
private readonly ISiteOptions siteOptions;
private readonly ISharePointCustomOperation cpt;
private readonly ISharePointAuthenticationManager authMgr;
private readonly ISubProjectRepository subProjectRepository;
private readonly IFieldEntryDataUpdate _fieldEntryDataUpdate;
private readonly ILogger<SubProjectBuilderService> logger;
public SubProjectBuilderService(ISiteOptions siteOptions,
ISharePointCustomOperation cpt,
ISharePointAuthenticationManager authMgr,
ISubProjectRepository subProjectRepository,
IFieldEntryDataUpdate fieldEntryDataUpdate,
ILogger<SubProjectBuilderService> logger)
{
this.siteOptions = siteOptions;
this.cpt = cpt;
this.authMgr = authMgr;
this.subProjectRepository = subProjectRepository;
_fieldEntryDataUpdate = fieldEntryDataUpdate;
this.logger = logger;
}
public bool SubProjectDocSet(string projName, List<string> listOfSubProjIds)
{
try
{
#region Context
var listTitle = siteOptions.GetSubProjList(projName);
var subSite = siteOptions.GetSubProjSite(projName);
var ctx = authMgr.GetContext(subSite);
var web = ctx.Web;
ctx.Load(web, w => w.Url);
var list = web.Lists.GetByTitle(listTitle);
ctx.Load(list, l => l.RootFolder, l => l.ContentTypes, l => l.Fields, l => l.ContentTypesEnabled);
ctx.ExecuteQuery();
list.ContentTypesEnabled = true;
list.Update();
if (cpt.ListContentTypeExist(ctx, listTitle, "Set di documenti") == false)
{
var documentCT = ctx.Site.RootWeb.AvailableContentTypes.GetById("0x0120D5");
ctx.Load(documentCT);
ctx.ExecuteQuery();
var ctDocSet = new ContentTypeCreationInformation()
{
Name = "Set di documenti",
ParentContentType = documentCT
};
list.ContentTypes.Add(ctDocSet);
list.Update();
ctx.ExecuteQuery();
}
var ctData = list.ContentTypes.Where(c => c.Name == "Set di documenti");
var contentType = ctData.FirstOrDefault();
ctx.Load(contentType);
ctx.ExecuteQuery();
#endregion
foreach (var subProjId in listOfSubProjIds)
{
if (cpt.FolderExistsInsideList(ctx, listTitle, subProjId))
{
_fieldEntryDataUpdate.FieldUpdate(ctx, listTitle, projName, FieldUpdateType.SubProject);
continue;
}
Console.WriteLine($"> Inizializzata la fase di creazione per {subProjId}.");
#region DocSet Field Entry
DocumentSet.Create(ctx, list.RootFolder, subProjId, contentType.Id);
ctx.ExecuteQuery();
Console.WriteLine($"> DocumentSet {subProjId} creata.");
//var dsItem = list.RootFolder.Folders.GetByUrl(subProjId).ListItemAllFields;
//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["PAL_Status"] = subProjectRepository.DefaultState(projName);
//dsItem.Update();
//ctx.ExecuteQuery();
_fieldEntryDataUpdate.FieldUpdate(ctx, listTitle, subProjId, FieldUpdateType.SubProject);
Console.WriteLine($"> Field value update.");
#endregion
#region SubProject Folder
foreach (var name in Folders.SubProjectDocSet)
{
Console.WriteLine($"La sotto cartella {name} verrà creata in {subProjId}");
var rPath = ResourcePath.FromDecodedUrl($"{subProjId}/{name}");
list.RootFolder.AddSubFolderUsingPath(rPath);
}
ctx.ExecuteQuery();
Console.WriteLine($"Le sotto cartelle sono state create con successo in {subProjId}");
#endregion
Console.WriteLine($"> {subProjId} creato con successo in SottoCommesse {projName}.");
}
}
catch (Exception ex)
{
logger.LogError(ex,"Sub Proj Doc Set");
return false;
}
return true;
}
}