Changeset View
Changeset View
Standalone View
Standalone View
kmymoney/plugins/xml/mymoneystoragexml.cpp
Context not available. | |||||
66 | #include "payeeidentifiertyped.h" | 66 | #include "payeeidentifiertyped.h" | ||
---|---|---|---|---|---|
67 | #include "payeeidentifier/ibanbic/ibanbic.h" | 67 | #include "payeeidentifier/ibanbic/ibanbic.h" | ||
68 | #include "payeeidentifier/nationalaccount/nationalaccount.h" | 68 | #include "payeeidentifier/nationalaccount/nationalaccount.h" | ||
69 | #include "mymoney/onlinetasks/sepa/sepaonlinetransferimpl.h" | ||||
69 | #include "plugins/xmlhelper/xmlstoragehelper.h" | 70 | #include "plugins/xmlhelper/xmlstoragehelper.h" | ||
70 | #include "mymoneyenums.h" | 71 | #include "mymoneyenums.h" | ||
71 | 72 | | |||
Context not available. | |||||
178 | static MyMoneySchedule readSchedule(const QDomElement &node); | 179 | static MyMoneySchedule readSchedule(const QDomElement &node); | ||
179 | static void writeSchedule(const MyMoneySchedule &schedule, QDomDocument &document, QDomElement &parent); | 180 | static void writeSchedule(const MyMoneySchedule &schedule, QDomDocument &document, QDomElement &parent); | ||
180 | static onlineJob readOnlineJob(const QDomElement &node); | 181 | static onlineJob readOnlineJob(const QDomElement &node); | ||
182 | static onlineTask *readOnlineTask(const QDomElement &element); | ||||
183 | static onlineTask *readSepaOnlineTransfer(const QDomElement &element); | ||||
181 | static void writeOnlineJob(const onlineJob &job, QDomDocument &document, QDomElement &parent); | 184 | static void writeOnlineJob(const onlineJob &job, QDomDocument &document, QDomElement &parent); | ||
185 | static void writeSepaOnlineTransfer(const onlineTask &obj, QDomDocument &document, QDomElement &parent); | ||||
182 | static MyMoneyCostCenter readCostCenter(const QDomElement &node); | 186 | static MyMoneyCostCenter readCostCenter(const QDomElement &node); | ||
183 | static void writeCostCenter(const MyMoneyCostCenter &costCenter, QDomDocument &document, QDomElement &parent); | 187 | static void writeCostCenter(const MyMoneyCostCenter &costCenter, QDomDocument &document, QDomElement &parent); | ||
184 | }; | 188 | }; | ||
Context not available. | |||||
867 | payeeIdentifierData *MyMoneyXmlContentHandler::readPayeeIdentifier(const QDomElement &element) | 871 | payeeIdentifierData *MyMoneyXmlContentHandler::readPayeeIdentifier(const QDomElement &element) | ||
868 | { | 872 | { | ||
869 | const auto identifierType = element.attribute(attributeName(Attribute::Payee::Type)); | 873 | const auto identifierType = element.attribute(attributeName(Attribute::Payee::Type)); | ||
870 | const auto identifierId = element.attribute(attributeName(Attribute::Payee::ID)).toUInt(); | | |||
871 | 874 | | |||
872 | payeeIdentifierData* identData = nullptr; | 875 | payeeIdentifierData* identData = nullptr; | ||
873 | 876 | | |||
Context not available. | |||||
958 | writeIBANBIC(obj, elem); | 961 | writeIBANBIC(obj, elem); | ||
959 | else if (obj->payeeIdentifierId() == payeeIdentifiers::nationalAccount::staticPayeeIdentifierIid()) | 962 | else if (obj->payeeIdentifierId() == payeeIdentifiers::nationalAccount::staticPayeeIdentifierIid()) | ||
960 | writeNationalAccount(obj, elem); | 963 | writeNationalAccount(obj, elem); | ||
961 | obj->writeXML(document, elem); | | |||
962 | } | 964 | } | ||
963 | parent.appendChild(elem); | 965 | parent.appendChild(elem); | ||
964 | } | 966 | } | ||
Context not available. | |||||
1284 | oJob.setBankAnswer(eMyMoney::OnlineJob::sendingState::noBankAnswer); | 1286 | oJob.setBankAnswer(eMyMoney::OnlineJob::sendingState::noBankAnswer); | ||
1285 | 1287 | | |||
1286 | auto taskElem = node.firstChildElement(elementName(Element::OnlineJob::OnlineTask)); | 1288 | auto taskElem = node.firstChildElement(elementName(Element::OnlineJob::OnlineTask)); | ||
1287 | oJob.setTask(onlineJobAdministration::instance()->createOnlineTaskByXml(taskElem.attribute(attributeName(Attribute::OnlineJob::IID)), taskElem)); | 1289 | auto task = readOnlineTask(taskElem); | ||
1290 | if (task) | ||||
1291 | oJob.setTask(task); | ||||
1288 | 1292 | | |||
1289 | return oJob; | 1293 | return oJob; | ||
1290 | } | 1294 | } | ||
1291 | 1295 | | |||
1296 | onlineTask *MyMoneyXmlContentHandler::readOnlineTask(const QDomElement &element) | ||||
1297 | { | ||||
1298 | onlineTask *taskOnline = nullptr; | ||||
1299 | const auto iid = element.attribute(attributeName(Attribute::OnlineJob::IID)); | ||||
1300 | if (iid == sepaOnlineTransferImpl::name()) { | ||||
1301 | // @todo This is probably memory leak but for now it works alike to original code | ||||
1302 | onlineJobAdministration::instance()->registerOnlineTask(new sepaOnlineTransferImpl); | ||||
1303 | taskOnline = readSepaOnlineTransfer(element); | ||||
1304 | } else { | ||||
1305 | throw MYMONEYEXCEPTION(QString::fromLatin1("Unknown online task type %1").arg(iid)); | ||||
1306 | } | ||||
1307 | | ||||
1308 | return taskOnline; | ||||
1309 | } | ||||
1310 | | ||||
1311 | static const unsigned short defaultTextKey = 51; | ||||
1312 | static const unsigned short defaultSubTextKey = 0; | ||||
1313 | | ||||
1314 | onlineTask *MyMoneyXmlContentHandler::readSepaOnlineTransfer(const QDomElement &element) | ||||
1315 | { | ||||
1316 | auto task = new sepaOnlineTransferImpl(); | ||||
1317 | task->setOriginAccount(element.attribute(attributeName(Attribute::OnlineJob::OriginAccount))); | ||||
1318 | task->setValue(MyMoneyMoney(MyMoneyUtils::QStringEmpty(element.attribute(attributeName(Attribute::OnlineJob::Value))))); | ||||
1319 | task->setTextKey(element.attribute(attributeName(Attribute::OnlineJob::TextKey), QString().setNum(defaultTextKey)).toUShort()); | ||||
1320 | task->setSubTextKey(element.attribute(attributeName(Attribute::OnlineJob::SubTextKey), QString().setNum(defaultSubTextKey)).toUShort()); | ||||
1321 | task->setPurpose(element.attribute(attributeName(Attribute::OnlineJob::Purpose))); | ||||
1322 | task->setEndToEndReference(element.attribute(attributeName(Attribute::OnlineJob::EndToEndReference))); | ||||
1323 | | ||||
1324 | payeeIdentifiers::ibanBic beneficiary; | ||||
1325 | payeeIdentifiers::ibanBic* beneficiaryPtr = nullptr; | ||||
1326 | auto beneficiaryEl = element.firstChildElement(attributeName(Attribute::OnlineJob::Beneficiary)); | ||||
1327 | if (!beneficiaryEl.isNull()) { | ||||
1328 | auto identifierData = readIBANBIC(beneficiaryEl); | ||||
1329 | auto identifier = payeeIdentifier(0, identifierData); | ||||
1330 | payeeIdentifierTyped<payeeIdentifiers::ibanBic> IBANBICidentifier = payeeIdentifierTyped<payeeIdentifiers::ibanBic>(identifier); | ||||
1331 | beneficiaryPtr = IBANBICidentifier.data(); | ||||
1332 | if (beneficiaryPtr) | ||||
1333 | task->setBeneficiary(*beneficiaryPtr); | ||||
1334 | else | ||||
1335 | task->setBeneficiary(beneficiary); | ||||
1336 | } else { | ||||
1337 | task->setBeneficiary(beneficiary); | ||||
1338 | } | ||||
1339 | | ||||
1340 | return task; | ||||
1341 | } | ||||
1342 | | ||||
1292 | void MyMoneyXmlContentHandler::writeOnlineJob(const onlineJob &job, QDomDocument &document, QDomElement &parent) | 1343 | void MyMoneyXmlContentHandler::writeOnlineJob(const onlineJob &job, QDomDocument &document, QDomElement &parent) | ||
1293 | { | 1344 | { | ||
1294 | auto el = document.createElement(nodeName(Node::OnlineJob)); | 1345 | auto el = document.createElement(nodeName(Node::OnlineJob)); | ||
Context not available. | |||||
1309 | default: void(); | 1360 | default: void(); | ||
1310 | } | 1361 | } | ||
1311 | 1362 | | |||
1312 | QDomElement taskEl = document.createElement(elementName(Element::OnlineJob::OnlineTask)); | 1363 | auto taskEl = document.createElement(elementName(Element::OnlineJob::OnlineTask)); | ||
1313 | taskEl.setAttribute(attributeName(Attribute::OnlineJob::IID), job.taskIid()); | 1364 | taskEl.setAttribute(attributeName(Attribute::OnlineJob::IID), job.taskIid()); | ||
1314 | try { | 1365 | if (job.taskIid() == sepaOnlineTransferImpl::name()) { | ||
1315 | job.task()->writeXML(document, taskEl); // throws execption if there is no task | 1366 | try { | ||
1367 | writeSepaOnlineTransfer(*job.task(), document, taskEl); | ||||
1316 | el.appendChild(taskEl); // only append child if there is something to append | 1368 | el.appendChild(taskEl); // only append child if there is something to append | ||
1317 | } catch (const onlineJob::emptyTask &) { | 1369 | } catch (const onlineJob::emptyTask &) { | ||
1370 | } | ||||
1371 | | ||||
1372 | } else { | ||||
1373 | throw MYMONEYEXCEPTION(QString::fromLatin1("Unknown online task type %1").arg(job.taskIid())); | ||||
1318 | } | 1374 | } | ||
1319 | 1375 | | |||
1320 | parent.appendChild(el); | 1376 | parent.appendChild(el); | ||
1321 | } | 1377 | } | ||
1322 | 1378 | | |||
1379 | void MyMoneyXmlContentHandler::writeSepaOnlineTransfer(const onlineTask &obj, QDomDocument &document, QDomElement &parent) | ||||
1380 | { | ||||
1381 | const auto &task = dynamic_cast<const sepaOnlineTransferImpl &>(obj); | ||||
1382 | | ||||
1383 | parent.setAttribute(attributeName(Attribute::OnlineJob::OriginAccount), task.responsibleAccount()); | ||||
1384 | parent.setAttribute(attributeName(Attribute::OnlineJob::Value), task.value().toString()); | ||||
1385 | parent.setAttribute(attributeName(Attribute::OnlineJob::TextKey), task.textKey()); | ||||
1386 | parent.setAttribute(attributeName(Attribute::OnlineJob::SubTextKey), task.subTextKey()); | ||||
1387 | | ||||
1388 | if (!task.purpose().isEmpty()) | ||||
1389 | parent.setAttribute(attributeName(Attribute::OnlineJob::Purpose), task.purpose()); | ||||
1390 | | ||||
1391 | if (!task.endToEndReference().isEmpty()) | ||||
1392 | parent.setAttribute(attributeName(Attribute::OnlineJob::EndToEndReference), task.endToEndReference()); | ||||
1393 | | ||||
1394 | auto beneficiaryEl = document.createElement(attributeName(Attribute::OnlineJob::Beneficiary)); | ||||
1395 | writeIBANBIC(task.beneficiary(), beneficiaryEl); | ||||
1396 | parent.appendChild(beneficiaryEl); | ||||
1397 | } | ||||
1398 | | ||||
1323 | MyMoneyCostCenter MyMoneyXmlContentHandler::readCostCenter(const QDomElement &node) | 1399 | MyMoneyCostCenter MyMoneyXmlContentHandler::readCostCenter(const QDomElement &node) | ||
1324 | { | 1400 | { | ||
1325 | if (nodeName(Node::CostCenter) != node.tagName()) | 1401 | if (nodeName(Node::CostCenter) != node.tagName()) | ||
Context not available. |