public ErrorCode DeleteRow(DataModel dataModel, DataModelTransaction transaction, DebtRuleRow debtRuleRow) { debtRuleRow.AcquireReaderLock(transaction); DebtRuleMapRow[] debtRuleMaps = debtRuleRow.GetDebtRuleMapRows(); if (debtRuleRow.GetDebtClassRows().Length != 0) { return(ErrorCode.AccessDenied); } debtRuleRow.ReleaseReaderLock(transaction.TransactionId); foreach (DebtRuleMapRow debtRuleMapRow in debtRuleMaps) { debtRuleMapRow.AcquireReaderLock(transaction); if (!DataModelFilters.HasAccess(transaction, TradingSupport.UserId, debtRuleMapRow.DebtClassId, AccessRight.Write)) { return(ErrorCode.AccessDenied); } debtRuleMapRow.ReleaseReaderLock(transaction.TransactionId); } debtRuleRow.AcquireWriterLock(transaction); dataModel.DestroyDebtRule(new object[] { debtRuleRow.DebtRuleId }, debtRuleRow.RowVersion); debtRuleRow.ReleaseLock(transaction.TransactionId); return(ErrorCode.Success); }
/// <summary> /// Delete a debt holder /// </summary> /// <returns>True for sucess</returns> public override ErrorCode Delete(ConsumerTrust record) { DataModel dataModel = new DataModel(); DataModelTransaction transaction = DataModelTransaction.Current; if (record.RowId == null || DataModel.ConsumerTrust.ConsumerTrustKey.Find(record.RowId) == null) { return(ErrorCode.RecordNotFound); } ConsumerTrustRow consumerTrust = DataModel.ConsumerTrust.ConsumerTrustKey.Find(record.RowId); consumerTrust.AcquireReaderLock(transaction); Guid debtId = consumerTrust.ConsumerTrustId; ConsumerRow consumer = consumerTrust.ConsumerRow; DebtRuleRow debtRule = consumerTrust.DebtRuleRow; consumerTrust.ReleaseReaderLock(transaction.TransactionId); #if false // If we switch from explicitly deleting the working order to explicitly deleting the security, then we need this. if (!TradingSupport.HasAccess(transaction, debtId, AccessRight.Write)) { return(ErrorCode.AccessDenied); } #endif consumerTrust.AcquireWriterLock(transaction); if (consumerTrust.RowState != DataRowState.Deleted && consumerTrust.RowState != DataRowState.Detached) { dataModel.DestroyConsumerTrust(new object[] { consumerTrust.ConsumerTrustId }, record.RowVersion); } consumerTrust.ReleaseWriterLock(transaction.TransactionId); consumer.AcquireWriterLock(transaction); if (consumer.RowState != DataRowState.Deleted && consumer.RowState != DataRowState.Detached) { dataModel.DestroyConsumer(new object[] { consumer.ConsumerId }, consumer.RowVersion); } consumer.ReleaseWriterLock(transaction.TransactionId); if (debtRule != null) { debtRule.AcquireReaderLock(transaction); if (debtRule.RowState != DataRowState.Deleted && debtRule.RowState != DataRowState.Detached && debtRule.GetDebtRuleMapRows().Length == 0) { DebtRulePersistence debtRulePersistence = new DebtRulePersistence(); Guid debtRuleId = debtRule.DebtRuleId; long rowVersion = debtRule.RowVersion; debtRule.ReleaseReaderLock(transaction.TransactionId); debtRulePersistence.Delete(new Records.DebtRule { RowId = debtRuleId, RowVersion = rowVersion }); } else { debtRule.ReleaseReaderLock(transaction.TransactionId); } } return(ErrorCode.Success); }
public override void Update(DebtRule record) { DataModel dataModelClient = new DataModel(); DataModelTransaction transaction = DataModelTransaction.Current; DebtRuleRow debtRuleRow = DataModel.DebtRule.DebtRuleKey.Find(record.RowId); DebtRuleMapRow[] debtRuleMapRows; List <Guid> paymentMethod = record.PaymentMethod.ToList(); if (record.RowId == null || debtRuleRow == null) { throw new FaultException <RecordNotFoundFault>(new RecordNotFoundFault("DebtRule", new object[] { record.RowId }), "DebtRule could not be found"); } debtRuleRow.AcquireReaderLock(transaction); debtRuleMapRows = debtRuleRow.GetDebtRuleMapRows(); // There really should be at most one of these, but there may be none. foreach (DebtRuleMapRow debtRuleMapRow in debtRuleMapRows) { debtRuleMapRow.AcquireReaderLock(transaction); if (!DataModelFilters.HasAccess(transaction, TradingSupport.UserId, debtRuleMapRow.DebtClassId, AccessRight.Write)) { throw new SecurityAccessDeniedException("Current user does not have right access to the debt class that owns this debt rule"); } debtRuleMapRow.ReleaseLock(transaction.TransactionId); } foreach (DebtRulePaymentMethodRow methodRow in debtRuleRow.GetDebtRulePaymentMethodRows()) { methodRow.AcquireReaderLock(transaction); if (paymentMethod.Contains(methodRow.PaymentMethodTypeId)) { paymentMethod.Remove(methodRow.PaymentMethodTypeId); } else { dataModelClient.DestroyDebtRulePaymentMethod(new object[] { methodRow.DebtRulePaymentMethodId }, methodRow.RowVersion); } methodRow.ReleaseLock(transaction.TransactionId); } foreach (Guid method in paymentMethod) { dataModelClient.CreateDebtRulePaymentMethod(record.RowId, Guid.NewGuid(), method); } debtRuleRow.ReleaseLock(transaction.TransactionId); dataModelClient.UpdateDebtRule( null, new object[] { record.RowId }, null, record.IsAutoSettled, record.Name, record.PaymentLength, record.PaymentStartDateLength, record.PaymentStartDateUnitId, record.RowVersion, record.SettlementUnitId, record.SettlementValue); debtRuleRow.ReleaseLock(transaction.TransactionId); }