File indexing completed on 2024-05-12 05:22:28

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Daniel Vrátil <dvratil@kde.org>
0003  * SPDX-FileCopyrightText: 2022 Claudio Cambra <claudio.cambra@kde.org>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-only
0006  * SPDX-License-Identifier: LGPL-3.0-only
0007  * SPDX-License-Identifier: LicenseRef-KDE-Accepted-LGPL
0008  */
0009 
0010 #include "organization.h"
0011 
0012 #include "fieldmetadata.h"
0013 #include "peopleservice.h"
0014 
0015 #include <QJsonArray>
0016 #include <QJsonObject>
0017 #include <QJsonValue>
0018 #include <QSharedData>
0019 
0020 #include <algorithm>
0021 
0022 namespace KGAPI2::People
0023 {
0024 class Organization::Private : public QSharedData
0025 {
0026 public:
0027     explicit Private() = default;
0028     Private(const Private &) = default;
0029     Private(Private &&) noexcept = delete;
0030     Private &operator=(const Private &) = delete;
0031     Private &operator=(Private &&) noexcept = delete;
0032     ~Private() = default;
0033 
0034     bool operator==(const Private &other) const
0035     {
0036         return location == other.location && title == other.title && type == other.type && metadata == other.metadata && symbol == other.symbol
0037             && formattedType == other.formattedType && name == other.name && current == other.current && costCenter == other.costCenter
0038             && department == other.department && domain == other.domain && startDate == other.startDate && jobDescription == other.jobDescription
0039             && endDate == other.endDate && phoneticName == other.phoneticName && fullTimeEquivalentMillipercent == other.fullTimeEquivalentMillipercent;
0040     }
0041 
0042     bool operator!=(const Private &other) const
0043     {
0044         return !(*this == other);
0045     }
0046 
0047     QString location{};
0048     QString title{};
0049     QString type{};
0050     FieldMetadata metadata{};
0051     QString symbol{};
0052     QString formattedType{};
0053     QString name{};
0054     bool current{};
0055     bool hasSetCurrent{};
0056     QString costCenter{};
0057     QString department{};
0058     QString domain{};
0059     QDate startDate{};
0060     QString jobDescription{};
0061     QDate endDate{};
0062     QString phoneticName{};
0063     int fullTimeEquivalentMillipercent{};
0064     bool hasSetFullTimeEquivalentMillipercent{};
0065 };
0066 
0067 Organization::Organization()
0068     : d(new Private)
0069 {
0070 }
0071 
0072 Organization::Organization(const Organization &) = default;
0073 Organization::Organization(Organization &&) noexcept = default;
0074 Organization &Organization::operator=(const Organization &) = default;
0075 Organization &Organization::operator=(Organization &&) noexcept = default;
0076 Organization::~Organization() = default;
0077 
0078 bool Organization::operator==(const Organization &other) const
0079 {
0080     return *d == *other.d;
0081 }
0082 
0083 bool Organization::operator!=(const Organization &other) const
0084 {
0085     return !(*this == other);
0086 }
0087 
0088 QString Organization::location() const
0089 {
0090     return d->location;
0091 }
0092 
0093 void Organization::setLocation(const QString &value)
0094 {
0095     d->location = value;
0096 }
0097 QString Organization::title() const
0098 {
0099     return d->title;
0100 }
0101 
0102 void Organization::setTitle(const QString &value)
0103 {
0104     d->title = value;
0105 }
0106 QString Organization::type() const
0107 {
0108     return d->type;
0109 }
0110 
0111 void Organization::setType(const QString &value)
0112 {
0113     d->type = value;
0114 }
0115 FieldMetadata Organization::metadata() const
0116 {
0117     return d->metadata;
0118 }
0119 
0120 void Organization::setMetadata(const FieldMetadata &value)
0121 {
0122     d->metadata = value;
0123 }
0124 QString Organization::symbol() const
0125 {
0126     return d->symbol;
0127 }
0128 
0129 void Organization::setSymbol(const QString &value)
0130 {
0131     d->symbol = value;
0132 }
0133 QString Organization::formattedType() const
0134 {
0135     return d->formattedType;
0136 }
0137 QString Organization::name() const
0138 {
0139     return d->name;
0140 }
0141 
0142 void Organization::setName(const QString &value)
0143 {
0144     d->name = value;
0145 }
0146 bool Organization::current() const
0147 {
0148     return d->current;
0149 }
0150 
0151 void Organization::setCurrent(bool value)
0152 {
0153     d->current = value;
0154     d->hasSetCurrent = true;
0155 }
0156 
0157 bool Organization::hasSetCurrent() const
0158 {
0159     return d->hasSetCurrent;
0160 }
0161 
0162 QString Organization::costCenter() const
0163 {
0164     return d->costCenter;
0165 }
0166 
0167 void Organization::setCostCenter(const QString &value)
0168 {
0169     d->costCenter = value;
0170 }
0171 QString Organization::department() const
0172 {
0173     return d->department;
0174 }
0175 
0176 void Organization::setDepartment(const QString &value)
0177 {
0178     d->department = value;
0179 }
0180 QString Organization::domain() const
0181 {
0182     return d->domain;
0183 }
0184 
0185 void Organization::setDomain(const QString &value)
0186 {
0187     d->domain = value;
0188 }
0189 QDate Organization::startDate() const
0190 {
0191     return d->startDate;
0192 }
0193 
0194 void Organization::setStartDate(const QDate &value)
0195 {
0196     d->startDate = value;
0197 }
0198 QString Organization::jobDescription() const
0199 {
0200     return d->jobDescription;
0201 }
0202 
0203 void Organization::setJobDescription(const QString &value)
0204 {
0205     d->jobDescription = value;
0206 }
0207 QDate Organization::endDate() const
0208 {
0209     return d->endDate;
0210 }
0211 
0212 void Organization::setEndDate(const QDate &value)
0213 {
0214     d->endDate = value;
0215 }
0216 QString Organization::phoneticName() const
0217 {
0218     return d->phoneticName;
0219 }
0220 
0221 void Organization::setPhoneticName(const QString &value)
0222 {
0223     d->phoneticName = value;
0224 }
0225 int Organization::fullTimeEquivalentMillipercent() const
0226 {
0227     return d->fullTimeEquivalentMillipercent;
0228 }
0229 
0230 void Organization::setFullTimeEquivalentMillipercent(int value)
0231 {
0232     d->fullTimeEquivalentMillipercent = value;
0233     d->hasSetFullTimeEquivalentMillipercent = true;
0234 }
0235 
0236 bool Organization::hasSetFullTimeEquivalentMillipercent() const
0237 {
0238     return d->hasSetFullTimeEquivalentMillipercent;
0239 }
0240 
0241 Organization Organization::fromJSON(const QJsonObject &obj)
0242 {
0243     Organization organization;
0244 
0245     if(!obj.isEmpty()) {
0246         const auto metadata = obj.value(QStringLiteral("metadata")).toObject();
0247         organization.d->metadata = FieldMetadata::fromJSON(metadata);
0248         organization.d->type = obj.value(QStringLiteral("type")).toString();
0249         organization.d->formattedType = obj.value(QStringLiteral("formattedType")).toString();
0250 
0251         const auto jsonStartDate = obj.value(QStringLiteral("startDate")).toObject();
0252         const auto startYear = jsonStartDate.value(QStringLiteral("year")).toInt();
0253         const auto startMonth = jsonStartDate.value(QStringLiteral("month")).toInt();
0254         const auto startDay = jsonStartDate.value(QStringLiteral("day")).toInt();
0255         organization.d->startDate = QDate(startYear, startMonth, startDay);
0256 
0257         const auto jsonEndDate = obj.value(QStringLiteral("endDate")).toObject();
0258         const auto endYear = jsonEndDate.value(QStringLiteral("year")).toInt();
0259         const auto endMonth = jsonEndDate.value(QStringLiteral("month")).toInt();
0260         const auto endDay = jsonEndDate.value(QStringLiteral("day")).toInt();
0261         organization.d->endDate = QDate(endYear, endMonth, endDay);
0262 
0263         organization.d->current = obj.value(QStringLiteral("current")).toBool();
0264         organization.d->hasSetCurrent = obj.contains(QStringLiteral("current"));
0265         organization.d->name = obj.value(QStringLiteral("name")).toString();
0266         organization.d->phoneticName = obj.value(QStringLiteral("phoneticName")).toString();
0267         organization.d->department = obj.value(QStringLiteral("department")).toString();
0268         organization.d->title = obj.value(QStringLiteral("title")).toString();
0269         organization.d->jobDescription = obj.value(QStringLiteral("jobDescription")).toString();
0270         organization.d->symbol = obj.value(QStringLiteral("symbol")).toString();
0271         organization.d->domain = obj.value(QStringLiteral("domain")).toString();
0272         organization.d->location = obj.value(QStringLiteral("location")).toString();
0273         organization.d->costCenter = obj.value(QStringLiteral("costCenter")).toString();
0274         organization.d->fullTimeEquivalentMillipercent = obj.value(QStringLiteral("fullTimeEquivalentMillipercent")).toInt();
0275         organization.d->hasSetFullTimeEquivalentMillipercent = obj.contains(QStringLiteral("fullTimeEquivalentMillipercent"));
0276     }
0277 
0278     return organization;
0279 }
0280 
0281 QList<Organization> Organization::fromJSONArray(const QJsonArray &data)
0282 {
0283     QList<Organization> organizations;
0284 
0285     for(const auto &organization : data) {
0286         if(organization.isObject()) {
0287             const auto objectifiedOrganization = organization.toObject();
0288             organizations.append(fromJSON(objectifiedOrganization));
0289         }
0290     }
0291 
0292     return organizations;
0293 }
0294 
0295 QJsonValue Organization::toJSON() const
0296 {
0297     QJsonObject obj;
0298 
0299     PeopleUtils::addValueToJsonObjectIfValid(obj, "location", d->location);
0300     PeopleUtils::addValueToJsonObjectIfValid(obj, "title", d->title);
0301     PeopleUtils::addValueToJsonObjectIfValid(obj, "type", d->type);
0302     // Skip, field metadata is only useful for receiving -> PeopleUtils::addValueToJsonObjectIfValid(obj, "metadata", d->metadata.toJSON());
0303     PeopleUtils::addValueToJsonObjectIfValid(obj, "symbol", d->symbol);
0304     // Output only -> PeopleUtils::addValueToJsonObjectIfValid(obj, "formattedType", d->formattedType);
0305     PeopleUtils::addValueToJsonObjectIfValid(obj, "name", d->name);
0306 
0307     if (d->hasSetCurrent) {
0308         PeopleUtils::addValueToJsonObjectIfValid(obj, "current", d->current);
0309     }
0310 
0311     PeopleUtils::addValueToJsonObjectIfValid(obj, "costCenter", d->costCenter);
0312     PeopleUtils::addValueToJsonObjectIfValid(obj, "department", d->department);
0313     PeopleUtils::addValueToJsonObjectIfValid(obj, "domain", d->domain);
0314     PeopleUtils::addValueToJsonObjectIfValid(obj, "jobDescription", d->jobDescription);
0315     PeopleUtils::addValueToJsonObjectIfValid(obj, "phoneticName", d->phoneticName);
0316 
0317     if(d->hasSetFullTimeEquivalentMillipercent) {
0318         PeopleUtils::addValueToJsonObjectIfValid(obj, "fullTimeEquivalentMillipercent", d->fullTimeEquivalentMillipercent);
0319     }
0320 
0321     return obj;
0322 }
0323 
0324 } // namespace KGAPI2::People