204 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
This file is part of Telegram Desktop,
 | 
						|
the official desktop application for the Telegram messaging service.
 | 
						|
 | 
						|
For license and copyright information please follow this link:
 | 
						|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | 
						|
*/
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include "ui/text/text_entity.h"
 | 
						|
 | 
						|
namespace Payments::Ui {
 | 
						|
 | 
						|
struct LabeledPrice {
 | 
						|
	QString label;
 | 
						|
	int64 price = 0;
 | 
						|
};
 | 
						|
 | 
						|
struct Cover {
 | 
						|
	QString title;
 | 
						|
	TextWithEntities description;
 | 
						|
	QString seller;
 | 
						|
	QImage thumbnail;
 | 
						|
};
 | 
						|
 | 
						|
struct Receipt {
 | 
						|
	TimeId date = 0;
 | 
						|
	int64 totalAmount = 0;
 | 
						|
	QString currency;
 | 
						|
	bool paid = false;
 | 
						|
 | 
						|
	[[nodiscard]] bool empty() const {
 | 
						|
		return !paid;
 | 
						|
	}
 | 
						|
	[[nodiscard]] explicit operator bool() const {
 | 
						|
		return !empty();
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
struct Invoice {
 | 
						|
	Cover cover;
 | 
						|
 | 
						|
	std::vector<LabeledPrice> prices;
 | 
						|
	std::vector<int64> suggestedTips;
 | 
						|
	int64 tipsMax = 0;
 | 
						|
	int64 tipsSelected = 0;
 | 
						|
	QString currency;
 | 
						|
	Receipt receipt;
 | 
						|
 | 
						|
	bool isNameRequested = false;
 | 
						|
	bool isPhoneRequested = false;
 | 
						|
	bool isEmailRequested = false;
 | 
						|
	bool isShippingAddressRequested = false;
 | 
						|
	bool isRecurring = false;
 | 
						|
	bool isFlexible = false;
 | 
						|
	bool isTest = false;
 | 
						|
 | 
						|
	QString provider;
 | 
						|
	QString recurringTermsUrl;
 | 
						|
	bool phoneSentToProvider = false;
 | 
						|
	bool emailSentToProvider = false;
 | 
						|
 | 
						|
	[[nodiscard]] bool valid() const {
 | 
						|
		return !currency.isEmpty() && (!prices.empty() || tipsMax);
 | 
						|
	}
 | 
						|
	[[nodiscard]] explicit operator bool() const {
 | 
						|
		return valid();
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
struct ShippingOption {
 | 
						|
	QString id;
 | 
						|
	QString title;
 | 
						|
	std::vector<LabeledPrice> prices;
 | 
						|
};
 | 
						|
 | 
						|
struct ShippingOptions {
 | 
						|
	QString currency;
 | 
						|
	std::vector<ShippingOption> list;
 | 
						|
	QString selectedId;
 | 
						|
};
 | 
						|
 | 
						|
struct Address {
 | 
						|
	QString address1;
 | 
						|
	QString address2;
 | 
						|
	QString city;
 | 
						|
	QString state;
 | 
						|
	QString countryIso2;
 | 
						|
	QString postcode;
 | 
						|
 | 
						|
	[[nodiscard]] bool valid() const {
 | 
						|
		return !address1.isEmpty()
 | 
						|
			&& !city.isEmpty()
 | 
						|
			&& !countryIso2.isEmpty();
 | 
						|
	}
 | 
						|
	[[nodiscard]] explicit operator bool() const {
 | 
						|
		return valid();
 | 
						|
	}
 | 
						|
 | 
						|
	inline bool operator==(const Address &other) const {
 | 
						|
		return (address1 == other.address1)
 | 
						|
			&& (address2 == other.address2)
 | 
						|
			&& (city == other.city)
 | 
						|
			&& (state == other.state)
 | 
						|
			&& (countryIso2 == other.countryIso2)
 | 
						|
			&& (postcode == other.postcode);
 | 
						|
	}
 | 
						|
	inline bool operator!=(const Address &other) const {
 | 
						|
		return !(*this == other);
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
struct RequestedInformation {
 | 
						|
	QString defaultPhone;
 | 
						|
	QString defaultCountry;
 | 
						|
	bool save = true;
 | 
						|
 | 
						|
	QString name;
 | 
						|
	QString phone;
 | 
						|
	QString email;
 | 
						|
	Address shippingAddress;
 | 
						|
 | 
						|
	[[nodiscard]] bool empty() const {
 | 
						|
		return name.isEmpty()
 | 
						|
			&& phone.isEmpty()
 | 
						|
			&& email.isEmpty()
 | 
						|
			&& !shippingAddress;
 | 
						|
	}
 | 
						|
	[[nodiscard]] explicit operator bool() const {
 | 
						|
		return !empty();
 | 
						|
	}
 | 
						|
 | 
						|
	inline bool operator==(const RequestedInformation &other) const {
 | 
						|
		return (name == other.name)
 | 
						|
			&& (phone == other.phone)
 | 
						|
			&& (email == other.email)
 | 
						|
			&& (shippingAddress == other.shippingAddress);
 | 
						|
	}
 | 
						|
	inline bool operator!=(const RequestedInformation &other) const {
 | 
						|
		return !(*this == other);
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
enum class InformationField {
 | 
						|
	ShippingStreet,
 | 
						|
	ShippingCity,
 | 
						|
	ShippingState,
 | 
						|
	ShippingCountry,
 | 
						|
	ShippingPostcode,
 | 
						|
	Name,
 | 
						|
	Email,
 | 
						|
	Phone,
 | 
						|
};
 | 
						|
 | 
						|
struct NativeMethodDetails {
 | 
						|
	QString defaultCountry;
 | 
						|
 | 
						|
	bool supported = false;
 | 
						|
	bool needCountry = false;
 | 
						|
	bool needZip = false;
 | 
						|
	bool needCardholderName = false;
 | 
						|
	bool canSaveInformation = false;
 | 
						|
};
 | 
						|
 | 
						|
struct PaymentMethodAdditional {
 | 
						|
	QString title;
 | 
						|
	QString url;
 | 
						|
};
 | 
						|
 | 
						|
struct PaymentMethodSaved {
 | 
						|
	QString id;
 | 
						|
	QString title;
 | 
						|
};
 | 
						|
 | 
						|
struct PaymentMethodDetails {
 | 
						|
	NativeMethodDetails native;
 | 
						|
	std::vector<PaymentMethodSaved> savedMethods;
 | 
						|
	std::vector<PaymentMethodAdditional> additionalMethods;
 | 
						|
	QString url;
 | 
						|
	QString provider;
 | 
						|
	int savedMethodIndex = 0;
 | 
						|
	bool canSaveInformation = false;
 | 
						|
};
 | 
						|
 | 
						|
enum class CardField {
 | 
						|
	Number,
 | 
						|
	Cvc,
 | 
						|
	ExpireDate,
 | 
						|
	Name,
 | 
						|
	AddressCountry,
 | 
						|
	AddressZip,
 | 
						|
};
 | 
						|
 | 
						|
struct UncheckedCardDetails {
 | 
						|
	QString number;
 | 
						|
	QString cvc;
 | 
						|
	uint32 expireYear = 0;
 | 
						|
	uint32 expireMonth = 0;
 | 
						|
	QString cardholderName;
 | 
						|
	QString addressCountry;
 | 
						|
	QString addressZip;
 | 
						|
};
 | 
						|
 | 
						|
} // namespace Payments::Ui
 |