private void UpdateProposalClauses(ScrumFactoryEntities context, Proposal proposal, Proposal oldProposal) { while (oldProposal.Clauses.Count > 0) { context.ProposalClauses.DeleteObject(oldProposal.Clauses.First()); } foreach (ProposalClause clause in proposal.Clauses) { context.ProposalClauses.AddObject(clause); } }
private void UpdateProposalItems(ScrumFactoryEntities context, Proposal proposal, Proposal oldProposal) { // get new items added at the proposal and the removed ones ProposalItem[] newItems = new ProposalItem[0]; if (proposal.Items != null) { newItems = proposal.Items.Where(i => !oldProposal.Items.Any(oi => oi.BacklogItemUId == i.BacklogItemUId)).ToArray(); } ProposalItem[] deletedItems = new ProposalItem[0]; if (oldProposal.Items != null) { deletedItems = oldProposal.Items.Where(oi => !proposal.Items.Any(i => i.BacklogItemUId == oi.BacklogItemUId)).ToArray(); } // add and delete proposal items foreach (ProposalItem item in newItems) { context.ProposalItems.AddObject(item); } foreach (ProposalItem item in deletedItems) { context.ProposalItems.DeleteObject(item); } }
public void SaveProposal(Proposal proposal, bool removeDocument = false) { using (var context = new ScrumFactoryEntities(this.connectionString)) { Proposal oldProposal = GetProjectProposal(proposal.ProjectUId, proposal.ProposalUId); using (TransactionScope scope = new TransactionScope()) { // if its a new proposal if (oldProposal == null) { // proposals context.Proposals.AddObject(proposal); // items foreach (ProposalItem pitem in proposal.Items) { context.ProposalItems.AddObject(pitem); } // clauses if (proposal.Clauses != null) { foreach (ProposalClause clause in proposal.Clauses) { context.ProposalClauses.AddObject(clause); } } } // if is an old one else { context.AttachTo("Proposals", oldProposal); context.ApplyCurrentValues <Proposal>("Proposals", proposal); // if is approving a proposal, adds its XAML document if (proposal.ProposalDocument != null) { context.ProposalDocuments.AddObject(proposal.ProposalDocument); } else if (removeDocument) { var doc = context.ProposalDocuments.SingleOrDefault(d => d.ProposalUId == proposal.ProposalUId); if (doc != null) { context.ProposalDocuments.DeleteObject(doc); } } if (oldProposal.Items == null) { oldProposal.Items = new List <ProposalItem>(); } if (proposal.Items == null) { proposal.Items = new List <ProposalItem>(); } UpdateProposalItems(context, proposal, oldProposal); UpdateProposalClauses(context, proposal, oldProposal); UpdateProposalFixedCosts(context, proposal, oldProposal); } context.SaveChanges(); scope.Complete(); } } }
private void UpdateProposalFixedCosts(ScrumFactoryEntities context, Proposal proposal, Proposal oldProposal) { // make sure no proposal has null collections if (proposal.FixedCosts == null) { proposal.FixedCosts = new List <ProposalFixedCost>(); } if (oldProposal.FixedCosts == null) { oldProposal.FixedCosts = new List <ProposalFixedCost>(); } ProposalFixedCost[] newCosts = new ProposalFixedCost[0]; newCosts = proposal.FixedCosts.Where(i => !oldProposal.FixedCosts.Any(oi => oi.ProposalFixedCostUId == i.ProposalFixedCostUId)).ToArray(); ProposalFixedCost[] deletedCosts = new ProposalFixedCost[0]; deletedCosts = oldProposal.FixedCosts.Where(oi => !proposal.FixedCosts.Any(i => i.ProposalFixedCostUId == oi.ProposalFixedCostUId)).ToArray(); ProposalFixedCost[] updatedCosts = new ProposalFixedCost[0]; updatedCosts = proposal.FixedCosts.Where(oi => oldProposal.FixedCosts.Any(i => i.ProposalFixedCostUId == oi.ProposalFixedCostUId)).ToArray(); // add/update/delete proposal items foreach (ProposalFixedCost cost in newCosts) { context.ProposalFixedCosts.AddObject(cost); } foreach (ProposalFixedCost cost in deletedCosts) { context.ProposalFixedCosts.DeleteObject(cost); } foreach (ProposalFixedCost cost in updatedCosts) { context.ApplyCurrentValues <ProposalFixedCost>("ProposalFixedCosts", cost); } }