public async System.Threading.Tasks.Task CreateExpendituresAndPreWSSurvs(ILambdaContext context, Podio podio, ViewService viewServ, Item check, RoutedPodioEvent e, DriveService service, GetIds ids, GoogleIntegration google) { try { var fieldId = 0; context.Logger.LogLine("Creating Expenditures and Pre WS Surveys"); //--- Create Program Budget Template (Expendatures) ---// viewServ = new ViewService(podio); context.Logger.LogLine("Got View Service"); var views = await viewServ.GetViews(21481130); //VC Admin Master Schedule App var view = from v in views where v.Name == "Workshop Associations" select v; context.Logger.LogLine("Got View"); var op = new FilterOptions { Filters = view.First().Filters, Limit = 500 }; var filter = await podio.FilterItems(21481130, op); foreach (var master in filter.Items) { var child = new Item(); fieldId = ids.GetFieldId("VC Administration|Expenditures Curation |Purpose"); var purposeMaster = master.Field <TextItemField>(fieldId); if (purposeMaster.Value != null) { fieldId = ids.GetFieldId("Expenditures|Purpose"); var purposeChild = child.Field <TextItemField>(fieldId); purposeChild.Value = purposeMaster.Value; } fieldId = ids.GetFieldId("VC Administration|Expenditures Curation |Workshop Associations"); var waMaster = master.Field <CategoryItemField>(fieldId); if (waMaster.Options.Any()) { fieldId = ids.GetFieldId("Expenditures|Workshop Associations"); var waChild = child.Field <CategoryItemField>(fieldId); waChild.OptionText = waMaster.Options.First().Text; } fieldId = ids.GetFieldId("VC Administration|Expenditures Curation |Expense Type"); var expMaster = master.Field <CategoryItemField>(fieldId); if (expMaster.Options.Any()) { fieldId = ids.GetFieldId("Expenditures|Expense Type"); var expChild = child.Field <CategoryItemField>(fieldId); expChild.OptionText = expMaster.Options.First().Text; } fieldId = ids.GetFieldId("VC Administration|Expenditures Curation |Amount"); var amountMaster = master.Field <MoneyItemField>(fieldId); if (amountMaster.Value.HasValue) { fieldId = ids.GetFieldId("Expenditures|Amount"); var amountChild = child.Field <MoneyItemField>(fieldId); amountChild.Value = amountMaster.Value; } fieldId = ids.GetFieldId("Admin|Program Manager"); var managerMaster = check.Field <ContactItemField>(fieldId); if (managerMaster.Contacts.Any()) { fieldId = ids.GetFieldId("Expenditures|Spender"); var managerChild = child.Field <ContactItemField>(fieldId); var cs = new List <int>(); foreach (var contact in managerMaster.Contacts) { cs.Add(contact.ProfileId); managerChild.ContactIds = cs; } } fieldId = ids.GetFieldId("Expenditures|Status"); var status = child.Field <CategoryItemField>(fieldId); status.OptionText = "Template"; var waitSeconds = 5; CallPodio: try { await podio.CreateItem(child, ids.GetFieldId($"Expenditures"), false); } catch (PodioUnavailableException ex) { context.Logger.LogLine($"{ex.Message}"); context.Logger.LogLine($"Trying again in {waitSeconds} seconds."); for (var i = 0; i < waitSeconds; i++) { System.Threading.Thread.Sleep(1000); context.Logger.LogLine("."); } waitSeconds = waitSeconds * 2; goto CallPodio; } } //--- Create Pre-Workshop Surveys ---// context.Logger.LogLine("Creating surveys"); viewServ = new ViewService(podio); context.Logger.LogLine("Got View Service"); views = await viewServ.GetViews(21389770); //VC Admin Master Schedule App view = from v in views where v.Name == "PreWS" select v; context.Logger.LogLine("Got View"); op = new FilterOptions { Filters = view.First().Filters, Limit = 500 }; filter = await podio.FilterItems(21389770, op); foreach (var master in filter.Items) { var child = new Item(); fieldId = ids.GetFieldId("VC Administration|Survey|Title"); var titleMaster = master.Field <TextItemField>(fieldId); if (titleMaster.Value != null) { fieldId = ids.GetFieldId("Surveys|Title"); var titleChild = child.Field <TextItemField>(fieldId); titleChild.Value = titleMaster.Value; } fieldId = ids.GetFieldId("VC Administration|Survey|Notes"); var notesMaster = master.Field <TextItemField>(fieldId); if (notesMaster.Value != null) { fieldId = ids.GetFieldId("Surveys|Notes"); var notesChild = child.Field <TextItemField>(fieldId); //notesChild.Value = StripHTML(notesMaster.Value); notesChild.Value = notesMaster.Value; } fieldId = ids.GetFieldId("VC Administration|Survey|Related Workshop"); var relMaster = master.Field <CategoryItemField>(fieldId); if (relMaster.Options.Any()) { fieldId = ids.GetFieldId("Surveys|Related Workshop"); var relChild = child.Field <CategoryItemField>(fieldId); relChild.OptionText = relMaster.Options.First().Text; } fieldId = ids.GetFieldId("VC Administration|Survey|Gdrive Survey"); var embedMaster = master.Field <EmbedItemField>(fieldId); fieldId = ids.GetFieldId("Surveys|Link to Survey"); var embedChild = child.Field <EmbedItemField>(fieldId); var embeds = new List <Embed>(); var parentFolderId = Environment.GetEnvironmentVariable("GOOGLE_PARENT_FOLDER_ID"); var cloneFolderId = google.GetSubfolderId(service, podio, e, parentFolderId); foreach (var em in embedMaster.Embeds) { if (em.OriginalUrl.Contains(".google.")) { await google.UpdateOneEmbed(service, em, embeds, cloneFolderId, podio, e); } else // Hold for 2.0 // { var nonG = new NonGdriveLinks(); await nonG.NonGDriveCopy(em, embeds, podio, e); } } foreach (var embed in embeds) { embedChild.AddEmbed(embed.EmbedId); } var waitSeconds = 5; CallPodio: try { await podio.CreateItem(child, ids.GetFieldId("Surveys"), false); } catch (PodioUnavailableException ex) { context.Logger.LogLine($"{ex.Message}"); context.Logger.LogLine($"Trying again in {waitSeconds} seconds."); for (var i = 0; i < waitSeconds; i++) { System.Threading.Thread.Sleep(1000); context.Logger.LogLine("."); } waitSeconds = waitSeconds * 2; goto CallPodio; } } } catch (Exception ex) { context.Logger.LogLine(ex.Message); } }
public async System.Threading.Tasks.Task CreateSurveys(CategoryItemField checkType, GetIds ids, Podio podio, GoogleIntegration google, DriveService service, RoutedPodioEvent e, ILambdaContext context) { var fieldId = 0; var parts = checkType.Options.First().Text.Split('/'); if (parts[1].Trim() == "Day 1") { var filterValue = parts[0].Trim(); var op = new FilterOptions { Limit = 500 }; var filterConditions = new Dictionary <string, string> { { ids.GetFieldId("VC Administration|Survey|[WS]").ToString(), filterValue } }; op.Filters = filterConditions; var filter = await podio.FilterItems(21389770, op); foreach (var master in filter.Items) { var child = new Item(); fieldId = ids.GetFieldId("VC Administration|Survey|Title"); var titleMaster = master.Field <TextItemField>(fieldId); if (titleMaster.Value != null) { fieldId = ids.GetFieldId("Surveys|Title"); var titleChild = child.Field <TextItemField>(fieldId); titleChild.Value = titleMaster.Value; } fieldId = ids.GetFieldId("VC Administration|Survey|Notes"); var notesMaster = master.Field <TextItemField>(fieldId); if (notesMaster.Value != null) { fieldId = ids.GetFieldId("Surveys|Notes"); var notesChild = child.Field <TextItemField>(fieldId); //notesChild.Value = StripHTML(notesMaster.Value); notesChild.Value = notesMaster.Value; } fieldId = ids.GetFieldId("VC Administration|Survey|Related Workshop"); var relMaster = master.Field <CategoryItemField>(fieldId); if (relMaster.Options.Any()) { fieldId = ids.GetFieldId("Surveys|Related Workshop"); var relChild = child.Field <CategoryItemField>(fieldId); relChild.OptionText = relMaster.Options.First().Text; } fieldId = ids.GetFieldId("VC Administration|Survey|Gdrive Survey"); var embedMaster = master.Field <EmbedItemField>(fieldId); fieldId = ids.GetFieldId("Surveys|Link to Survey"); var embedChild = child.Field <EmbedItemField>(fieldId); var embeds = new List <Embed>(); var parentFolderId = Environment.GetEnvironmentVariable("GOOGLE_PARENT_FOLDER_ID"); var cloneFolderId = google.GetSubfolderId(service, podio, e, parentFolderId); foreach (var em in embedMaster.Embeds) { if (em.OriginalUrl.Contains(".google.")) { await google.UpdateOneEmbed(service, em, embeds, cloneFolderId, podio, e); } else // Hold for 2.0 // { var nonG = new NonGdriveLinks(); await nonG.NonGDriveCopy(em, embeds, podio, e); } } foreach (var embed in embeds) { embedChild.AddEmbed(embed.EmbedId); } //embed fields var waitSeconds = 5; CallPodio: try { await podio.CreateItem(child, ids.GetFieldId("Surveys"), false); } catch (PodioUnavailableException ex) { context.Logger.LogLine($"{ex.Message}"); context.Logger.LogLine($"Trying again in {waitSeconds} seconds."); for (var i = 0; i < waitSeconds; i++) { System.Threading.Thread.Sleep(1000); context.Logger.LogLine("."); } waitSeconds = waitSeconds * 2; goto CallPodio; } } } }