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