apigee_m10n-8.x-1.7/src/MonetizationInterface.php
src/MonetizationInterface.php
<?php /* * Copyright 2018 Google Inc. * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2 as published by the * Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., 51 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ namespace Drupal\apigee_m10n; use Apigee\Edge\Api\ApigeeX\Entity\DeveloperBillingType; use Apigee\Edge\Api\Management\Entity\OrganizationInterface; use Apigee\Edge\Api\Monetization\Entity\CompanyInterface; use Apigee\Edge\Api\Monetization\Entity\TermsAndConditionsInterface; use Apigee\Edge\Api\Monetization\Structure\LegalEntityTermsAndConditionsHistoryItem; use Drupal\Core\Access\AccessResultInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Session\AccountInterface; use Drupal\apigee_m10n\Entity\RatePlanInterface; use Drupal\apigee_m10n\Entity\XRatePlanInterface; use Drupal\user\RoleInterface; use Drupal\user\UserInterface; /** * Interface MonetizationInterface. */ interface MonetizationInterface { /** * A list of permissions that will be given to authenticated users on install. */ const DEFAULT_AUTHENTICATED_PERMISSIONS = [ 'view rate_plan', 'view xproduct', 'purchase rate_plan', 'view own purchased_plan', 'update own purchased_plan', 'view own prepaid balance', 'refresh own prepaid balance', 'download prepaid balance reports', 'view own billing details', 'download own reports', ]; /** * Developer billing type attribute name. */ const BILLING_TYPE_ATTR = 'MINT_BILLING_TYPE'; /** * Tests whether the current organization has monetization enabled. * * A monitization enabled org is a requirement for using this module. * * @return bool * Whether or not monetization is enabled. */ public function isMonetizationEnabled(): bool; /** * Checks access to a product for a given account. * * @param \Drupal\Core\Entity\EntityInterface $entity * The 'api_product' entity. * @param \Drupal\Core\Session\AccountInterface $account * The user account. * * @return \Drupal\Core\Access\AccessResultInterface * Whether or not the user has access to the entity. */ public function apiProductAssignmentAccess(EntityInterface $entity, AccountInterface $account): AccessResultInterface; /** * Get's the prepaid balance for a developer. * * Takes in a developer UUID or email address, and a date specifying the * report month and year, and returns an array of prepaid balances. * * @param \Drupal\user\UserInterface $developer * The developer user. * @param \DateTimeImmutable $billingDate * The date for the billing report. * * @return \Apigee\Edge\Api\Monetization\Entity\PrepaidBalanceInterface[]|null * The balance list or null if no balances are available. */ public function getDeveloperPrepaidBalances(UserInterface $developer, \DateTimeImmutable $billingDate): ?array; /** * Get's the prepaid balance for a developer. * * Takes in a developer mail address and returns an array of prepaid balances. * * @param \Drupal\user\UserInterface $developer * The developer user. * * @return \Apigee\Edge\Api\ApigeeX\Entity\PrepaidBalanceInterface[] * The balance list or empty array if no balances are available. */ public function getDeveloperPrepaidBalancesX(UserInterface $developer): ?array; /** * Get's the prepaid balance for a team. * * Takes in a company name, and a date specifying the report month and year, * and returns an array of prepaid balances. * * @param \Apigee\Edge\Api\Monetization\Entity\CompanyInterface $company * The team. * @param \DateTimeImmutable $billingDate * The date for the billing report. * * @return \Apigee\Edge\Api\Monetization\Entity\PrepaidBalanceInterface[]|null * The balance list or null if no balances are available. */ public function getCompanyPrepaidBalances(CompanyInterface $company, \DateTimeImmutable $billingDate): ?array; /** * Format an amount using the `CommerceGuys\Intl` library. * * Use the commerceguys internationalization library to format a currency * based on a currency id. * * @param string $amount * The money amount. * @param string $currency_id * Currency ID as defined by `commerceguys/intl`. * * @see \CommerceGuys\Intl\Currency\CurrencyRepository::getBaseDefinitions * * @return string * The formatted amount as a string. */ public function formatCurrency(string $amount, string $currency_id): string; /** * Get supported currencies for an organization. * * @return array * An array of supported currency entities. */ public function getSupportedCurrencies(): ?array; /** * Returns a CSV string for prepaid balances. * * @param string $developer_id * The developer id. * @param \DateTimeImmutable $date * The month for the prepaid balances. * @param string $currency * The currency id. Example: usd. * * @return null|string * A CSV string of prepaid balances. */ public function getPrepaidBalanceReport(string $developer_id, \DateTimeImmutable $date, string $currency): ?string; /** * Check if developer accepted latest terms and conditions. * * @param string $developer_id * Developer ID. * * @return bool|null * User terms and conditions acceptance flag. */ public function isLatestTermsAndConditionAccepted(string $developer_id): ?bool; /** * Get latest terms and condition. * * @return \Apigee\Edge\Api\Monetization\Entity\TermsAndConditionsInterface * Latest term and condition. */ public function getLatestTermsAndConditions(): ?TermsAndConditionsInterface; /** * Accepts a terms and conditions by its id. * * @param string $developer_id * Developer ID. * * @return \Apigee\Edge\Api\Monetization\Structure\LegalEntityTermsAndConditionsHistoryItem|null * Terms and conditions history item. */ public function acceptLatestTermsAndConditions(string $developer_id): ?LegalEntityTermsAndConditionsHistoryItem; /** * Check if developer accepted latest terms and conditions. * * @param string $developer_id * Developer ID. * @param \Drupal\apigee_m10n\Entity\RatePlanInterface $rate_plan * Rate plan entity. * * @return bool|null * Check if developer is subscribed to a plan. */ public function isDeveloperAlreadySubscribed(string $developer_id, RatePlanInterface $rate_plan): bool; /** * Check if developer has subscribed to a plan. * * @param string $developer_id * Developer ID. * @param \Drupal\apigee_m10n\Entity\XRatePlanInterface $xrate_plan * Rate plan entity. * * @return bool|null * Check if developer is subscribed to a plan. */ public function isDeveloperAlreadySubscribedX(string $developer_id, XRatePlanInterface $xrate_plan): bool; /** * Handles `hook_form_FORM_ID_alter` (user_admin_permissions) for this module. * * @param array $form * The form array. * @param \Drupal\Core\Form\FormStateInterface $form_state * The form state. * @param string $form_id * The form ID (should always be `user_admin_permissions`). */ public function formUserAdminPermissionsAlter(&$form, FormStateInterface $form_state, $form_id); /** * Handles `hook_ENTITY_TYPE_presave` (user_role) for this module. * * @param \Drupal\user\RoleInterface $user_role * The user role. */ public function userRolePresave(RoleInterface $user_role); /** * Gets the Apigee Edge management organization entity. * * @return \Apigee\Edge\Api\Management\Entity\OrganizationInterface * The organization entity. */ public function getOrganization(): ?OrganizationInterface; /** * Returns true if developer billing type is prepaid, false if postpaid. * * @param \Drupal\user\UserInterface $account * The developer account. * * @return bool * True if developer is prepaid. */ public function isDeveloperPrepaid(UserInterface $account): bool; /** * Returns true if developer billing type is prepaid, false if postpaid. * * @param \Drupal\user\UserInterface $account * The developer account. * * @return bool * True if developer is prepaid. */ public function isDeveloperPrepaidX(UserInterface $account): bool; /** * Updates the billing type of the developer. * * @param string $developer_email * The developer email ID. * @param string $billingtype * The developer billing type. * * @return \Apigee\Edge\Api\ApigeeX\Entity\DeveloperBillingType * Billing type entity. */ public function updateBillingtype(string $developer_email, string $billingtype): DeveloperBillingType; /** * Returns the billing type of the developer. * * @param \Drupal\user\UserInterface $user * The developer account. * * @return string|null * Billing type. */ public function getBillingtype(UserInterface $user): ?string; /** * Returns true if current organization is ApigeeX, false if otherwise. * * @return bool * True if organization is ApigeeX. */ public function isOrganizationApigeeX(): bool; /** * Returns true if current organization is ApigeeX or Hybrid, false otherwise. * * @return bool * True if organization is ApigeeX or Hybrid. */ public function isOrganizationApigeeXorHybrid(): bool; }