static public object FromBasic(IHasIdentity basic) { string argumentType = basic.GetType().ToString(); switch (argumentType) { // ----- Is there any way to make self-writing code here through replication or similar, so // ----- that every case doesn't need to be listed? // ------------ COMMUNICATION CLASSES ------------ case "Swarmops.Basic.Types.BasicCommunicationTurnaround": return(CommunicationTurnaround.FromBasic((BasicCommunicationTurnaround)basic)); case "Swarmops.Basic.Types.Communications.BasicOutboundComm": return(OutboundComm.FromBasic((BasicOutboundComm)basic)); case "Swarmops.Basic.Types.Communications.BasicOutboundCommRecipient": return(OutboundCommRecipient.FromBasic((BasicOutboundCommRecipient)basic)); // ----------- FINANCIAL CLASSES ---------- case "Swarmops.Basic.Types.BasicExpenseClaim": return(ExpenseClaim.FromBasic((BasicExpenseClaim)basic)); case "Swarmops.Basic.Types.Financial.BasicCashAdvance": return(CashAdvance.FromBasic((BasicCashAdvance)basic)); case "Swarmops.Basic.Types.BasicInboundInvoice": return(InboundInvoice.FromBasic((BasicInboundInvoice)basic)); case "Swarmops.Basic.Types.Financial.BasicFinancialAccount": return(FinancialAccount.FromBasic((BasicFinancialAccount)basic)); case "Swarmops.Basic.Types.Financial.BasicFinancialTransaction": return(FinancialTransaction.FromBasic((BasicFinancialTransaction)basic)); case "Swarmops.Basic.Types.BasicFinancialValidation": return(FinancialValidation.FromBasic((BasicFinancialValidation)basic)); case "Swarmops.Basic.Types.BasicOutboundInvoice": return(OutboundInvoice.FromBasic((BasicOutboundInvoice)basic)); case "Swarmops.Basic.Types.BasicOutboundInvoiceItem": return(OutboundInvoiceItem.FromBasic((BasicOutboundInvoiceItem)basic)); case "Swarmops.Basic.Types.BasicPayment": return(Payment.FromBasic((BasicPayment)basic)); case "Swarmops.Basic.Types.BasicPaymentGroup": return(PaymentGroup.FromBasic((BasicPaymentGroup)basic)); case "Swarmops.Basic.Types.BasicPayout": return(Payout.FromBasic((BasicPayout)basic)); case "Swarmops.Basic.Types.BasicPayrollAdjustment": return(PayrollAdjustment.FromBasic((BasicPayrollAdjustment)basic)); case "Swarmops.Basic.Types.BasicPayrollItem": return(PayrollItem.FromBasic((BasicPayrollItem)basic)); case "Swarmops.Basic.Types.BasicSalary": return(Salary.FromBasic((BasicSalary)basic)); case "Swarmops.Basic.Types.Financial.BasicFinancialTransactionTagSet": return(FinancialTransactionTagSet.FromBasic((BasicFinancialTransactionTagSet)basic)); case "Swarmops.Basic.Types.Financial.BasicFinancialTransactionTagType": return(FinancialTransactionTagType.FromBasic((BasicFinancialTransactionTagType)basic)); // ------------ GOVERNANCE CLASSES ------------ case "Swarmops.Basic.Types.BasicBallot": return(Ballot.FromBasic((BasicBallot)basic)); case "Swarmops.Basic.Types.BasicMeetingElectionCandidate": return(MeetingElectionCandidate.FromBasic((BasicInternalPollCandidate)basic)); case "Swarmops.Basic.Types.BasicMeetingElection": return(MeetingElection.FromBasic((BasicInternalPoll)basic)); case "Swarmops.Basic.Types.BasicMeetingElectionVote": return(MeetingElectionVote.FromBasic((BasicInternalPollVote)basic)); case "Swarmops.Basic.Types.Governance.BasicMotion": return(Motion.FromBasic((BasicMotion)basic)); case "Swarmops.Basic.Types.Governance.BasicMotionAmendment": return(MotionAmendment.FromBasic((BasicMotionAmendment)basic)); // ------------ PARLEY/ACTIVISM CLASSES ------------ case "Swarmops.Basic.Types.BasicExternalActivity": return(ExternalActivity.FromBasic((BasicExternalActivity)basic)); case "Swarmops.Basic.Types.BasicParley": return(Parley.FromBasic((BasicParley)basic)); case "Swarmops.Basic.Types.BasicParleyAttendee": return(ParleyAttendee.FromBasic((BasicParleyAttendee)basic)); case "Swarmops.Basic.Types.BasicParleyOption": return(ParleyOption.FromBasic((BasicParleyOption)basic)); case "Swarmops.Basic.Types.BasicPerson": return(Person.FromBasic((BasicPerson)basic)); // ------------------ FAIL ---------------- default: throw new NotImplementedException("Unimplemented argument type: " + argumentType); } }
protected void Page_Init(object sender, EventArgs e) { string tagSetIdsString = Request["ctl00$PlaceHolderMain$HiddenTagSetIdentifiers"]; // Find our tag ids, either from previously hidden var or load from org if (String.IsNullOrEmpty(tagSetIdsString)) { this._tagSetIds = FinancialTransactionTagSets.ForOrganization(CurrentOrganization).Identities; } else { string[] tagSetIdStrings = tagSetIdsString.Split(','); this._tagSetIds = new int[tagSetIdStrings.Length]; for (int index = 0; index < tagSetIdStrings.Length; index++) { this._tagSetIds[index] = Int32.Parse(tagSetIdStrings[index]); } } // Construct data source List <TagSetDataSourceItem> dataSourceVisibleTags = new List <TagSetDataSourceItem>(); List <TagSetDataSourceItem> dataSourceForcedTags = new List <TagSetDataSourceItem>(); foreach (int tagSetId in this._tagSetIds) { TagSetDataSourceItem item = new TagSetDataSourceItem { TagSetId = tagSetId, TagSetLocalizedName = FinancialTransactionTagSetType.GetLocalizedName( FinancialTransactionTagSet.FromIdentity(tagSetId). FinancialTransactionTagSetTypeId) }; FinancialTransactionTagSet tagSet = FinancialTransactionTagSet.FromIdentity(tagSetId); if (tagSet.VisibilityLevel <= 1) { dataSourceVisibleTags.Add(item); if (!tagSet.AllowUntagged) { dataSourceForcedTags.Add(item); } } } // Bind data this.RepeaterTagLabels.DataSource = dataSourceVisibleTags; this.RepeaterTagDrop.DataSource = dataSourceVisibleTags; this.RepeaterTagDropScript.DataSource = dataSourceVisibleTags; this.RepeaterErrorCheckTags.DataSource = dataSourceForcedTags; this.RepeaterTagLabels.DataBind(); this.RepeaterTagDrop.DataBind(); this.RepeaterTagDropScript.DataBind(); this.RepeaterErrorCheckTags.DataBind(); // Write set list back to hidden variable List <string> tagSetIdStringList = new List <string>(); foreach (int tagSetId in this._tagSetIds) { tagSetIdStringList.Add(tagSetId.ToString(CultureInfo.InvariantCulture)); } this.HiddenTagSetIdentifiers.Value = String.Join(",", tagSetIdStringList.ToArray()); }
protected void Page_Load(object sender, EventArgs e) { Response.ContentType = "application/json"; int tagSetId = Int32.Parse(Request.QueryString["TagSetId"]); FinancialTransactionTagSet tagSet = FinancialTransactionTagSet.FromIdentity(tagSetId); if (tagSet.OrganizationId != CurrentOrganization.Identity) { throw new UnauthorizedAccessException(); } // Is this stuff in cache already? string cacheKey = "FinancialTransactionTagTypes-Json-" + tagSetId.ToString((CultureInfo.InvariantCulture)); string tagsJson = (string)Cache[cacheKey]; if (tagsJson != null) { Response.Output.WriteLine(tagsJson); Response.End(); return; } // Not in cache. Construct. // Get accounts FinancialTransactionTagTypes tagTypes = FinancialTransactionTagTypes.ForSet(tagSet); // Build tree (there should be a template for this) Dictionary <int, List <FinancialTransactionTagType> > treeMap = new Dictionary <int, List <FinancialTransactionTagType> >(); foreach (FinancialTransactionTagType tagType in tagTypes) { if (!treeMap.ContainsKey(tagType.ParentIdentity)) { treeMap[tagType.ParentIdentity] = new List <FinancialTransactionTagType>(); } treeMap[tagType.ParentIdentity].Add(tagType); } int renderRootNodeId = 0; if (treeMap[0].Count == 1 && treeMap.ContainsKey(treeMap[0][0].Identity)) { // assume there's a master root like "Costs"; bypass it renderRootNodeId = treeMap[0][0].Identity; } tagsJson = RecurseTreeMap(treeMap, renderRootNodeId); Cache.Insert(cacheKey, tagsJson, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero); // cache lasts for five minutes, no sliding expiration Response.Output.WriteLine(tagsJson); Response.End(); }