int DocumentsHandler::setEntry(const Akonadi::Item &item, QString &newId, QString &errorMessage) { if (!item.hasPayload<SugarDocument>()) { qCCritical(FATCRM_SUGARCRMRESOURCE_LOG) << "item (id=" << item.id() << ", remoteId=" << item.remoteId() << ", mime=" << item.mimeType() << ") is missing Document payload"; return SugarJob::InvalidContextError; } QList<KDSoapGenerated::TNS__Name_value> itemList; // if there is an id add it, otherwise skip this field // no id will result in the email being added if (!item.remoteId().isEmpty()) { KDSoapGenerated::TNS__Name_value field; field.setName(QStringLiteral("id")); field.setValue(item.remoteId()); itemList << field; } const SugarDocument document = item.payload<SugarDocument>(); const SugarDocument::AccessorHash accessors = SugarDocument::accessorHash(); SugarDocument::AccessorHash::const_iterator it = accessors.constBegin(); SugarDocument::AccessorHash::const_iterator endIt = accessors.constEnd(); for (; it != endIt; ++it) { // check if this is a read-only field if (it.key() == QLatin1String("id")) { continue; } const SugarDocument::valueGetter getter = (*it).getter; KDSoapGenerated::TNS__Name_value field; field.setName(sugarFieldFromCrmField(it.key())); field.setValue(KDCRMUtils::encodeXML((document.*getter)())); itemList << field; } // plus custom fields QMap<QString, QString> customFields = document.customFields(); QMap<QString, QString>::const_iterator cit = customFields.constBegin(); const QMap<QString, QString>::const_iterator end = customFields.constEnd(); for ( ; cit != end ; ++cit ) { KDSoapGenerated::TNS__Name_value field; field.setName(customSugarFieldFromCrmField(cit.key())); field.setValue(KDCRMUtils::encodeXML(cit.value())); itemList << field; } KDSoapGenerated::TNS__Name_value_list valueList; valueList.setItems(itemList); return mSession->protocol()->setEntry(module(), valueList, newId, errorMessage); }
int ContactsHandler::setEntry(const Akonadi::Item &item, QString &newId, QString &errorMessage) { if (!item.hasPayload<KContacts::Addressee>()) { qCCritical(FATCRM_SUGARCRMRESOURCE_LOG) << "item (id=" << item.id() << ", remoteId=" << item.remoteId() << ", mime=" << item.mimeType() << ") is missing Addressee payload"; return SugarJob::InvalidContextError; } QList<KDSoapGenerated::TNS__Name_value> itemList; // if there is an id add it, otherwise skip this field // no id will result in the contact being added if (!item.remoteId().isEmpty()) { KDSoapGenerated::TNS__Name_value field; field.setName(QStringLiteral("id")); field.setValue(item.remoteId()); itemList << field; } // add regular sugar fields const KContacts::Addressee addressee = item.payload<KContacts::Addressee>(); KDSoapGenerated::TNS__Name_value_list valueList = addresseeToNameValueList(addressee, itemList); return mSession->protocol()->setEntry(module(), valueList, newId, errorMessage); }
KDSoapGenerated::TNS__Name_value_list ContactsHandler::addresseeToNameValueList(const KContacts::Addressee &addressee, QList<KDSoapGenerated::TNS__Name_value> itemList) { const AccessorHash accessors = accessorHash(); AccessorHash::const_iterator it = accessors.constBegin(); AccessorHash::const_iterator endIt = accessors.constEnd(); for (; it != endIt; ++it) { // check if this is a read-only field if ((*it).getter == nullptr) { continue; } KDSoapGenerated::TNS__Name_value field; field.setName(sugarFieldFromCrmField(it.key())); const QString value = KDCRMUtils::encodeXML((*it).getter(addressee)); field.setValue(value); itemList << field; } // add custom sugar fields const QStringList customAddresseeFields = addressee.customs(); const static QString customFieldPrefix("FATCRM-X-Custom-"); QStringList customSugarFields; std::copy_if(customAddresseeFields.begin(), customAddresseeFields.end(), std::back_inserter(customSugarFields), [](const QString &custom) { return custom.startsWith(customFieldPrefix); }); for (const QString &custom : qAsConst(customSugarFields)) { const int pos = custom.indexOf(':'); if (pos == -1) continue; const QString name = custom.mid(customFieldPrefix.size(), pos - customFieldPrefix.size()); const QString value = custom.mid(pos + 1); KDSoapGenerated::TNS__Name_value field; field.setName(customSugarFieldFromCrmField(name)); field.setValue(KDCRMUtils::encodeXML(value)); itemList << field; } KDSoapGenerated::TNS__Name_value_list valueList; valueList.setItems(itemList); return valueList; }
bool ContactsHandler::setEntry(const Akonadi::Item &item) { if (!item.hasPayload<KABC::Addressee>()) { kError() << "item (id=" << item.id() << ", remoteId=" << item.remoteId() << ", mime=" << item.mimeType() << ") is missing Addressee payload"; return false; } QList<KDSoapGenerated::TNS__Name_value> itemList; // if there is an id add it, otherwise skip this field // no id will result in the contact being added if (!item.remoteId().isEmpty()) { KDSoapGenerated::TNS__Name_value field; field.setName(QLatin1String("id")); field.setValue(item.remoteId()); itemList << field; } const KABC::Addressee addressee = item.payload<KABC::Addressee>(); ContactAccessorHash::const_iterator it = mAccessors->constBegin(); ContactAccessorHash::const_iterator endIt = mAccessors->constEnd(); for (; it != endIt; ++it) { // check if this is a read-only field if ((*it)->getter == 0) { continue; } KDSoapGenerated::TNS__Name_value field; field.setName(it.key()); const QString value = KDCRMUtils::encodeXML((*it)->getter(addressee)); field.setValue(value); itemList << field; } KDSoapGenerated::TNS__Name_value_list valueList; valueList.setItems(itemList); soap()->asyncSet_entry(sessionId(), moduleName(), valueList); return true; }