public override SdataTransactionResult Add(PayloadBase payload, List<SyncFeedEntryLink> links)
{
string accountUuid = "";
SdataTransactionResult sdTrResult;
ContactPayload contactPayload = payload as ContactPayload;
if ((contactPayload.Contacttype.primacyIndicatorSpecified) &&
contactPayload.Contacttype.primacyIndicator)
{
// is primary
}
else
{
sdTrResult = new SdataTransactionResult();
sdTrResult.HttpMessage = "Only primary contacts suported";
sdTrResult.HttpMethod = "POST";
sdTrResult.HttpStatus = System.Net.HttpStatusCode.Forbidden;
sdTrResult.ResourceKind = SupportedResourceKinds.contacts;
sdTrResult.Uuid = StringToGuid(contactPayload.Contacttype.uuid);
return sdTrResult;
}
foreach (SyncFeedEntryLink link in links)
{
if ((!String.IsNullOrEmpty(link.PayloadPath)) &&
link.PayloadPath.Equals(_tradingAccountUuidPayloadPath,
StringComparison.InvariantCultureIgnoreCase))
{
accountUuid = link.Uuid;
break;
}
}
if (String.IsNullOrEmpty(accountUuid))
{
sdTrResult = new SdataTransactionResult();
sdTrResult.HttpMessage = "Trading Account UUID was missing";
sdTrResult.HttpMethod = "POST";
sdTrResult.HttpStatus = System.Net.HttpStatusCode.Forbidden;
sdTrResult.ResourceKind = _resourceKind;
sdTrResult.Uuid = StringToGuid(contactPayload.Contacttype.uuid);
return sdTrResult;
}
string accountId = GetTradingAccountLocalId(accountUuid);
if (String.IsNullOrEmpty(accountId))
{
sdTrResult = new SdataTransactionResult();
sdTrResult.HttpMessage = String.Format("Trading Account UUID {0} was not linked", accountUuid);
sdTrResult.HttpMethod = "POST";
sdTrResult.HttpStatus = System.Net.HttpStatusCode.Forbidden;
sdTrResult.ResourceKind = _resourceKind;
sdTrResult.Uuid = StringToGuid(contactPayload.Contacttype.uuid);
return sdTrResult;
}
Account account = new Account();
Identity accIdentity = new Identity(account.EntityName, accountId);
AccountDocument accountDocument = account.GetDocument(
accIdentity, _emptyToken, _context.Config) as AccountDocument;
Document document = null;
bool doAdd = false;
if (accountDocument.people.documents.Count == 0)
{
document = GetTransformedDocument(payload, links);
accountDocument.CrmId = GetTradingAccountUuid(document.Id);
accountDocument.addresses.documents.Add(document);
doAdd = true;
}
else
{
PersonDocument personDocument = accountDocument.people.documents[0] as PersonDocument;
if (personDocument.firstname.IsNull &&
personDocument.lastname.IsNull)
{
document = GetTransformedDocument(payload, links);
accountDocument.CrmId = GetTradingAccountUuid(document.Id);
accountDocument.addresses.documents[0] = document;
doAdd = true;
}
}
if (!doAdd)
{
sdTrResult = new SdataTransactionResult();
sdTrResult.HttpMessage = "Trading Account has already a primary contact";
sdTrResult.HttpMethod = "POST";
sdTrResult.HttpStatus = System.Net.HttpStatusCode.Forbidden;
sdTrResult.ResourceKind = _resourceKind;
sdTrResult.Uuid = StringToGuid(contactPayload.Contacttype.uuid);
return sdTrResult;
}
List<TransactionResult> transactionResults = new List<TransactionResult>();
account.Update(accountDocument, _context.Config, ref transactionResults);
sdTrResult = Helper.GetSdataTransactionResult(transactionResults,
_context.OriginEndPoint, SupportedResourceKinds.tradingAccounts);
if (sdTrResult != null)
{
sdTrResult.ResourceKind = _resourceKind;
sdTrResult.HttpMessage = "POST";
}
return sdTrResult;
}