public void Can_delete_subcription() { var customer = new Account { Id = Guid.NewGuid() }; var package = new cr953_package { Id = Guid.NewGuid() } .Set(e => e.cr953_monthlyprice, 100); var packageSummary = new cr953_packagesummary { Id = Guid.NewGuid() } .Set(e => e.cr953_customerid, customer.ToEntityReference()) .Set(e => e.cr953_totalamount, 100); var target = new cr953_subscription { Id = Guid.NewGuid() } .Set(e => e.cr953_customerid, customer.ToEntityReference()) .Set(e => e.cr953_packageid, package.ToEntityReference()) .Set(e => e.cr953_qty, 1) .Set(e => e.cr953_total, 100); var test = new TestEvent <cr953_subscription>(target, customer, package, packageSummary); test.DeleteEventCommand <CalculatePackageSummariesOnSubscriptionChange>(target.ToEntityReference()); Assert.True(test.Db.Event.Updated.Any()); var updated = test.Db.Event.Updated[0].ToEntity <cr953_packagesummary>(); Assert.Equal(packageSummary.Id, updated.Id); Assert.Equal(customer.Id, updated.Get(e => e.cr953_customerid).Id); Assert.Equal(0, updated.GetValue(e => e.cr953_totalamount)); }
protected override void HandleExecute() { var packageRef = Get(e => e.cr953_packageid); var customerRef = Get(e => e.cr953_customerid); var valid = packageRef != null && customerRef != null; if (!valid) { return; } var package = GetRelated(e => e.cr953_packageid, new ColumnSet <cr953_package>(e => e.cr953_monthlyprice)); if (package == null) { return; } var packageSummary = GetPackageSummary(customerRef.Id); var isDelete = Context.PluginExecutionContext.MessageName == "Delete"; var total = 0.0m; var initialAmount = Initial.GetValue(e => e.cr953_total); if (!isDelete) { var qty = GetValue(e => e.cr953_qty); var price = package.GetValue(e => e.cr953_monthlyprice); total = (qty * price); Set(e => e.cr953_total, total); total -= initialAmount; } else { total -= initialAmount; } var appliedTotal = packageSummary.GetValue(e => e.cr953_totalamount) + total; var name = customerRef.LogicalName == Account.EntityLogicalName ? Service.GetReferenceName <Account>(customerRef) : Service.GetReferenceName <Contact>(customerRef); var result = new cr953_packagesummary().Set(e => e.cr953_name, name + " Summary") .Set(e => e.cr953_customerid, customerRef).Set(e => e.cr953_totalamount, appliedTotal); if (packageSummary.Id != Guid.Empty) { result.Id = packageSummary.Id; Service.Update(result); return; } Service.Create(result); }