src/AtechNet/CoreBundle/Entity/User.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\AtechNet\CoreBundle\Entity;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\Common\Collections\Collection;
  5. use Doctrine\ORM\Mapping\Column;
  6. use Doctrine\ORM\Mapping\Entity;
  7. use Doctrine\ORM\Mapping\HasLifecycleCallbacks;
  8. use Doctrine\ORM\Mapping\JoinColumn;
  9. use Doctrine\ORM\Mapping\JoinTable;
  10. use Doctrine\ORM\Mapping\ManyToMany;
  11. use Doctrine\ORM\Mapping\OneToMany;
  12. use Doctrine\ORM\Mapping\OneToOne;
  13. use Doctrine\ORM\Mapping\OrderBy;
  14. use Doctrine\ORM\Mapping\Table as Table;
  15. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  16. use Symfony\Component\Security\Core\User\UserInterface;
  17. /**
  18.  * @Table(name="users")
  19.  * @Entity(repositoryClass="App\AtechNet\CoreBundle\Repository\UserRepository")
  20.  * @HasLifecycleCallbacks
  21.  */
  22. class User extends AbstractSignedEntity implements UserInterface, PasswordAuthenticatedUserInterface
  23. {
  24.     public const MENU_CACHE_KEY_PREFIX = 'navigation.v2';
  25.     public const string Type_SuperAdmin = 'superAdmin';
  26.     public const string Type_Admin = 'admin';
  27.     public const string Type_User = 'user';
  28.     public const string Type_Employee = 'employee';
  29.     public const string MODULE_ORDER = 'module_order';
  30.     public const string MODULE_BASKET = 'module_basket';
  31.     public const string MODULE_PRODUCT = 'module_product';
  32.     public const string MODULE_CUSTOMER = 'module_customer';
  33.     public const string MODULE_DOCUMENT = 'module_document';
  34.     public const string MODULE_STOCK = 'module_stock';
  35.     public const string MODULE_STOCK_MOVEMENT = 'module_stock_movement';
  36.     public const string MODULE_STOCK_ITEM = 'module_stock_item';
  37.     public const string MODULE_STATISTIC = 'module_statistic';
  38.     public const string MODULE_TASK = 'module_task';
  39.     public const string MODULE_FAQ = 'module_faq';
  40.     public const string MODULE_CLAIM = 'module_claim';
  41.     public const string MODULE_USER = 'module_user';
  42.     public const string MODULE_USER_DEPARTMENT = 'module_user_department';
  43.     public const string MODULE_MARKETING_TOOLS = 'module_marketing_tools';
  44.     public const string MODULE_OTHER = 'module_other';
  45.     public const string MODULE_SHORTCUT = 'module_shortcut';
  46.     public const string MODULE_CENTRALIS_SETTINGS = 'module_centralis_settings';
  47.     //Basic permissions
  48.     public const string PERMISSION_LIST = 'l';
  49.     public const string PERMISSION_CREATE = 'c';
  50.     public const string PERMISSION_READ = 'r';
  51.     public const string PERMISSION_UPDATE = 'u';
  52.     public const string PERMISSION_DELETE = 'd';
  53.     //Order module permissions
  54.     public const string PERMISSION_STATS = 'stats';
  55.     public const string PERMISSION_BASKET = 'basket';
  56.     public const string PERMISSION_PACKAGE_HANDOVER = 'package-handover';
  57.     public const string PERMISSION_COMMISSION = 'commission';
  58.     public const string PERMISSION_COMMISSION_CONFIRMATION_MAIL = 'commission-confirmation-mail';
  59.     public const string PERMISSION_QUANTITY = 'sold-quantity';
  60.     public const string PERMISSION_AMAZON_IMPORT = 'amazon-import';
  61.     public const string PERMISSION_BACKMARKET_IMPORT = 'backmarket-import';
  62.     public const string PERMISSION_REFURBED_IMPORT = 'refurbed-import';
  63.     public const string PERMISSION_PRODUCT_MODEL_CONNECTED_PRODUCT_IMPORT = "product-model-connected-product-import";
  64.     public const string PERMISSION_CLAIM_FROM_ORDER = 'claim-from-order';
  65.     public const string PERMISSION_CLAIM_CREATE_LABEL = 'claim-create-label';
  66.     public const string PERMISSION_WITHDRAWAL_FROM_ORDER = 'withdrawal-from-order';
  67.     public const string PERMISSION_ORDER_PROFIT = 'order-profit';
  68.     public const string PERMISSION_ORDER_EXPORT = 'order-export';
  69.     public const string PERMISSION_ORDER_SALES_EXPORT = 'order-sales-export';
  70.     public const string PERMISSION_DEBIT_CARD_EXPORT = 'debit-card-export';
  71.     public const string PERMISSION_ORDER_STATUS = 'order-status';
  72.     public const string PERMISSION_BILLINGO_PANEL = 'billingo-panel';
  73.     public const string PERMISSION_PAYMENT_METHOD = 'payment-method';
  74.     public const string PERMISSION_SHIPPING_METHOD = 'shipping-method';
  75.     public const string PERMISSION_PICKUP_POINT = 'pickup-point';
  76.     public const string PERMISSION_SET_PRIORITY = 'set-priority';
  77.     public const string PERMISSION_ARTISJUS_LABEL_EXPORT = 'artisjus-label-export';
  78.     public const string PERMISSION_MARKETPLACE_API = 'marketplace-managing-api';
  79.     public const string PERMISSION_ORDER_PROCESSING = 'order-processing-lock';
  80.     public const string PERMISSION_ORDER_PAID_ORDER_PRICE_EDITOR = 'order-paid-order-price-editor';
  81.     public const string PERMISSION_ORDER_PASTPAY_RESERVATION_SYNC = 'order-pastpay-reservation-sync';
  82.     public const string PERMISSION_PROCESSING_DASHBOARD = 'processing-dashboard';
  83.     public const string PERMISSION_PRODUCTION_STATION_EDITOR = 'production-station-editor';
  84.     public const string PERMISSION_USE_PURCHASE_PRICE = 'use-purchase-price';
  85.     public const string PERMISSION_ORDER_MANAGE_ORDER_BY = 'order-manage-order-by';
  86.     public const string PERMISSION_DOCUMENT_MOVEMENT_REMOVE = 'document-movement-remove';
  87.     public const string PERMISSION_DOCUMENT_MOVEMENT_ADD = 'document-movement-add';
  88.     //Product module permissions
  89.     public const string PERMISSION_OLD_ITEMS = 'old-items';
  90.     public const string PERMISSION_PRODUCT_EXPORT = 'product-export';
  91.     public const string PERMISSION_PRICE_IMPORT = 'price-import';
  92.     public const string PERMISSION_MARGIN_IMPORT = 'margin-import';
  93.     public const string PERMISSION_PRODUCT_STOCK_MOVEMENTS = 'product-stock-movements';
  94.     public const string PERMISSION_PRODUCT_PURCHASE_PRICES = 'product-purchase-prices';
  95.     public const string PERMISSION_PRODUCT_STATISTICS = 'product-statistics';
  96.     public const string PERMISSION_PRODUCT_DUPLICATE = 'product-duplicate';
  97.     public const string PERMISSION_PRODUCT_SPARE_PARTS = 'product-spare-parts';
  98.     public const string PERMISSION_SUPPLIER_NAME = 'product-supplier-name';
  99.     public const string PERMISSION_ATTRIBUTES = 'product-attributes';
  100.     public const string PERMISSION_VENDOR = 'vendor';
  101.     public const string PERMISSION_PRODUCT_PRICE_MONITOR = 'product-price-monitor';
  102.     public const string PERMISSION_PRODUCT_EXPORT_VIEW = 'product-export-view';
  103.     public const string PERMISSION_GENERATE_PRODUCT_OFFER_EMAIL = 'generate-product-offer-email';
  104.     public const string PERMISSION_PRODUCT_DOMAIN = 'product-domain';
  105.     public const string PERMISSION_UPLOAD_IMAGES_FOR_STOCK_ITEMS = 'upload-images-for-stock-items';
  106.     public const string PERMISSION_PRODUCT_LAST_SALE = 'product-last-sell';
  107.     public const string PERMISSION_EXPORT_NOT_LISTED_PRODUCT = 'export-not-listed-product';
  108.     public const string PERMISSION_EXPORT_QUARANTINE_SERIALS = 'export-quarantine-serials';
  109.     public const string PERMISSION_EXPORT_NOTEBOOK_PARTS_FROM_SHIPMENTS = 'export-notebook-parts-from-shipments';
  110.     public const string PERMISSION_EXPORT_SHIPMENTS = 'export-shipments';
  111.     public const string PERMISSION_SET_ARCHIVED_SETTING = 'set-archived-setting';
  112.     public const string PERMISSION_PRODUCT_MODEL = 'product-model';
  113.     public const string PERMISSION_PRODUCT_VARIATION = 'product-variation';
  114.     public const string PERMISSION_PRODUCT_EXPORT_PAYMENT_STATS = 'product-export-payment-stats';
  115.     //Customer module permissions
  116.     public const string PERMISSION_CUSTOMER_FEED_LIST = 'customer-feed-list';
  117.     public const string PERMISSION_ROUTE_PLANNER = 'route-planner';
  118.     public const string PERMISSION_PAYMENT_APPROVER = 'payment-approver';
  119.     public const string PERMISSION_PHONE_NUMBERS_EXPORT = 'phone-number-export';
  120.     public const string PERMISSION_ADMIN_LOGIN_USAGE = 'admin-login-panel-usage';
  121.     public const string PERMISSION_DEFAULT_DUE_DAYS_CHANGE = 'default-due-days-change';
  122.     public const string PERMISSION_CUSTOMER_PAYMENT_METHOD = 'customer-payment-method';
  123.     public const string PERMISSION_CUSTOMER_CALLBACK = 'customer-callback';
  124.     //Document module permissions
  125.     public const string PERMISSION_COMMITMENTS_RECEIVABLES_EXPORT = 'commitments-receivables-export';
  126.     public const string PERMISSION_ARTISJUS_PRODUCT_EXPORT = 'artisjus-product-export';
  127.     public const string PERMISSION_DOCUMENT_EXPORT = 'document-export';
  128.     public const string PERMISSION_BILLINGO_DOCUMENTS = 'billingo-documents';
  129.     public const string PERMISSION_POHODA_EXPORT = 'pohoda-export';
  130.     public const string PERMISSION_SOLD_GOODS_FROM_SK_TO_HU = 'sold-goods-from-sk-to-hu';
  131.     public const string PERMISSION_EXCHANGE_RATES = 'exchange-rates';
  132.     public const string PERMISSION_PAYMENTS = 'payments';
  133.     public const string PERMISSION_DOCUMENT_GROUPS = 'document-groups';
  134.     public const string PERMISSION_INVOICE_IN_TYPE = 'invoice-in-type';
  135.     public const string PERMISSION_PAYMENT_ADD = 'payment-add';
  136.     public const string PERMISSION_UPDATE_LOCKED_INVOICE = 'update-locked-invoice';
  137.     public const string PERMISSION_FOREIGN_SALES_EXPORT = 'foreign-sales-export';
  138.     public const string PERMISSION_CREDIT_NOTE_CREATE_MOVEMENT = 'credit-note-create-movement';
  139.     public const string PERMISSION_IN_DOCUMENT_NEXT_IT = 'in-document-next-it';
  140.     public const string PERMISSION_CREATE_CREDIT_NOTE = 'create-credit-note';
  141.     //Stock movement module permissions
  142.     public const string PERMISSION_IN_PRODUCTION_EXPORT = 'in-production-export';
  143.     public const string PERMISSION_STOCK_REVIEW = 'stock-review';
  144.     public const string PERMISSION_STOCK_REVIEW_DELETE = 'stock-review-delete';
  145.     public const string PERMISSION_STOCK_REVIEW_CLOSE = 'stock-review-close';
  146.     public const string PERMISSION_CORRECTIVE_MOVEMENT_CREATE = 'corrective-movement-create';
  147.     public const string PERMISSION_CREATE_DATE_EDIT = 'create-date-edit';
  148.     public const string PERMISSION_STOCK_MOVEMENT_LOGS = 'stock-movement-logs';
  149.     public const string PERMISSION_STOCK_MOVEMENT_LOCK_ALL = 'stock-movement-lock-all';
  150.     public const string PERMISSION_STOCK_MOVEMENT_LOCK_CONFIG_CHANGE = 'stock-movement-lock-config-change';
  151.     public const string PERMISSION_STOCK_MOVEMENT_LOCK_IN_BASIC = 'stock-movement-lock-in-basic';
  152.     public const string PERMISSION_STOCK_MOVEMENT_CHANGE_PRODUCTION_STATUS = 'stock-movement-change-production-status';
  153.     public const string PERMISSION_STOCK_POSITION_LABEL_PRINT = 'stock-position-label-print';
  154.     public const string PERMISSION_STOCK_MOVEMENT_ONLY_SCAN_STOCK_ITEMS = 'stock-movement-only-scan-stock-items';
  155.     public const string PERMISSION_STOCK_MOVEMENT_IN_UPDATED_ROWS = 'stock-movement-in-updated-rows';
  156.     public const string PERMISSION_STOCK_MOVEMENT_STOCK_REQUEST_ADMIN = 'stock-movement-stock-request-admin';
  157.     public const string PERMISSION_STOCK_MOVEMENT_CREATE_IN_PRODUCTION_MOVEMENT = 'stock-movement-create-in-product_movement';
  158.     public const string PERMISSION_STOCK_MOVEMENT_SERVICE_CONFIG_CHANGE = 'stock-movement-service-config-change';
  159.     public const string PERMISSION_STOCK_MOVEMENT_EXPORT_ALL = 'stock-movement-export-all';
  160.     public const string PERMISSION_STOCK_MOVEMENT_EXPORT_SHIPMENT_ITEM = 'stock-movement-export-shipment-item';
  161.     public const string PERMISSION_STOCK_MOVEMENT_CHANGE_CREDIT_NOTE_PRICES = 'stock-movement-change-credit-note';
  162.     public const string PERMISSION_STOCK_MOVEMENT_SHIPMENTS = 'stock-movement-shipments';
  163.     public const string PERMISSION_STOCK_MOVEMENT_CHANGE_SUBTYPE = 'stock-movement-change-subtype';
  164.     public const string PERMISSION_STOCK_MOVEMENT_GODMODE_EDIT = 'stock-movement-godmode-edit';
  165.     public const string PERMISSION_STOCK_MOVEMENT_SERVICE_NEUTRAl_SUBTYPE_CHANGE = 'stock-movement-service-neutral-subtype-change';
  166.     public const string PERMISSION_WANTED_ITEMS_LIST = 'wanted-items-list';
  167.     public const string PERMISSION_WANTED_ITEMS_EDIT_FROM_LIST = 'wanted-items-edit-from-list';
  168.     public const string PERMISSION_WANTED_ITEM_DELETE = 'wanted-item-delete';
  169.     //Stock item module permissions
  170.     public const string PERMISSION_GROUP_LABEL_PRINT = 'group-label-print';
  171.     public const string PERMISSION_POSITIONING = 'positioning';
  172.     public const string PERMISSION_TEMPORARY_STOCK_POSITIONS = 'temporary-stock-positions';
  173.     public const string PERMISSION_SET_POSITION_TO_KISZOLGALAS = 'set-position-to-kiszolgalas';
  174.     // Stock module permissions
  175.     public const string PERMISSION_STOCK_POSITION = 'stock-position';
  176.     //Statistic module permissions
  177.     public const string PERMISSION_INCOME_STATISTIC = 'income-statistic';
  178.     public const string PERMISSION_SALES_MANAGER_STATISTIC = 'sales-manager-statistic';
  179.     public const string PERMISSION_SALES_MANAGER_PARTNER_STATISTIC = 'sales-manager-partner-statistic';
  180.     public const string PERMISSION_EXPORT_SALES_MANAGER_STATISTIC = 'export-sales-manager-statistic';
  181.     public const string PERMISSION_STOCK_MOVEMENTS_STATISTIC = 'stock-movements-statistic';
  182.     public const string PERMISSION_STOCK_STATUS_STATISTIC = 'stock-status-statistic';
  183.     public const string PERMISSION_COMMITMENTS_RECEIVABLES_STATISTIC = 'commitments-receivables-statistic';
  184.     public const string PERMISSION_DAYS_IN_STOCK_STATISTIC = 'days-in-stock-statistic';
  185.     public const string PERMISSION_QUALITY_STATUS_STATISTIC = 'quality-status-statistic';
  186.     public const string PERMISSION_PRODUCTS_STATISTIC = 'products-statistic';
  187.     public const string PERMISSION_PRODUCT_SALES_STATISTIC = 'product-sales-statistic';
  188.     public const string PERMISSION_SALES_MANAGER_INCOME_TURNOVER = 'sales-manager-income-turnover';
  189.     public const string PERMISSION_CUSTOMERS_STATISTIC = 'customers-statistic';
  190.     public const string PERMISSION_ONLINE_STOCK_STATISTIC = 'online-stock-statistic';
  191.     public const string PERMISSION_GUESTS_STATISTIC = 'guest-statistic';
  192.     public const string PERMISSION_OLD_STOCK_ITEM_STATISTIC = 'old-stock-item-statistic';
  193.     public const string PERMISSION_STATISTIC_CREDIT_NOTE_VALUES = 'credit-note-statistic';
  194.     public const string PERMISSION_CLAIM_STATISTIC = 'claim-statistic';
  195.     public const string PERMISSION_ORDER_STATUS_CHANGELOG_STATISTIC = 'order-status-changelog-statistic';
  196.     public const string PERMISSION_ORDER_PRODUCT_CHANGELOG_STATISTIC = 'order-product-changelog-statistic';
  197.     public const string PERMISSION_ORDER_ERROR_COMMENT_STATISTIC = 'order-error-commment-statistic';
  198.     public const string PERMISSION_PACKAGES = 'packages-statistic';
  199.     public const string PERMISSION_STATISTIC_STOCK_POSITION = 'stock-position-statistic';
  200.     public const string PERMISSION_STATISTIC_STOCK_REQUEST_TIMES = 'stock-request-times-statistic';
  201.     public const string PERMISSION_RAKTAR_AND_KALODA_STATISTIC = 'raktar-and-kaloda-statistic';
  202.     public const string PERMISSION_MARKETPLACE_LISTINGS = 'marketplace-listing-statistic';
  203.     public const string PERMISSION_PROCESSING_STATISTIC = 'processing-statistic';
  204.     public const string PERMISSION_NOTEBOOK_BATTERY_SKIN_STATISTICS = 'notebook-battery-skin-statistics';
  205.     //User module permissions
  206.     public const string PERMISSION_PERMISSION_LIST = 'permission-list';
  207.     public const string PERMISSION_PERMISSION_GROUPS = 'permission-groups';
  208.     public const string PERMISSION_PERMISSION_CHANGELOG = 'permission-changelog';
  209.     public const string PERMISSION_MEAL_ORDERING = 'meal-ordering';
  210.     public const string PERMISSION_MEAL_CREDIT_RECHARGE = 'meal-credit-recharge';
  211.     public const string PERMISSION_DELETE_USER_ABSENCE = 'delete-user-absence';
  212.     public const string PERMISSION_USER_ABSENCE_STATISTICS = 'user-absence-statistics';
  213.     //Marketing tools module permissions
  214.     public const string PERMISSION_EDITING_PAGES = 'editing-pages';
  215.     public const string PERMISSION_BANNER = 'banner';
  216.     public const string PERMISSION_NANOBAR = 'nanobar';
  217.     public const string PERMISSION_PRODUCT_GROUPS = 'product-groups';
  218.     public const string PERMISSION_PRODUCT_TAGS = 'product-tags';
  219.     public const string PERMISSION_JOBS = 'jobs';
  220.     public const string PERMISSION_REVIEWS = 'reviews';
  221.     public const string PERMISSION_SURVEYS = 'surveys';
  222.     public const string PERMISSION_COUPONS = 'coupons';
  223.     public const string PERMISSION_NAVIGATION = 'navigation';
  224.     public const string PERMISSION_SEARCH_ENGINE = 'search-engine';
  225.     //Other module permissions
  226.     public const string PERMISSION_TRANSLATIONS = 'translations';
  227.     public const string PERMISSION_UPLOAD_FILE = 'upload-file';
  228.     public const string PERMISSION_INTERNAL_NEWS = 'internal-news';
  229.     public const string PERMISSION_AUTOMATIZATIONS = 'automatizations';
  230.     public const string PERMISSION_ERROR_CODES = 'error-codes';
  231.     public const string PERMISSION_ACCESS_LOG = 'access-log';
  232.     public const string PERMISSION_SHORTCUT = 'shortcut';
  233.     public const string PERMISSION_INTERNAL_JOBS = 'internal-jobs';
  234.     public const string PERMISSION_SHOW_FORCE_SAVING_LIST = 'show-force-saving-list';
  235.     public const string PERMISSION_UNAS_CHATGPT_TRANSLATION = 'user-chatgpt-translation';
  236.     public const string PERMISSION_KLAVIYO_CAMPAIGNS = 'marketing-klaviyo-campaigns';
  237.     // Birthday visibility choices
  238.     public const int BIRTHDAY_VISIBILITY_ALL = 0;
  239.     public const int BIRTHDAY_VISIBILITY_WITHOUT_YEAR = 1;
  240.     public const int BIRTHDAY_VISIBILITY_HIDDEN = 2;
  241.     public const int CENTRALIS_USER_ID = 40;
  242.     public const int HUN_ACCOUNTANT_ID = 210;
  243.     public const string USER_GROUP_E_COMMERCE_CUSTOMER_SERVICE = 'customer-service-g';
  244.     public const array USER_GROUP_E_COMMERCE_CUSTOMER_SERVICE_USERS = [
  245.         68, 363, 395, 408, 411,
  246.     ];
  247.     public const string USER_GROUP_FINANCE = 'finance-team-g';
  248.     public const array USER_GROUP_FINANCE_USERS = [
  249.         //Denisa Száraz Ruzsíková, Anikó Marosi, Viktória Tóthová, Mónika Vajai, Edina Pálová Vlčanová
  250.         23, 89, 139, 222, 249,
  251.     ];
  252.     public const int USER_ID_IMRICH_ZUBER = 6;
  253.     public const int USER_ID_MARTIN_RIECICIAR = 228;
  254.     public const int USER_ID_BEATA_SEDLAROVA = 242;
  255.     public const int USER_ID_GERHARD_SZABO = 127;
  256.     public const int USER_ID_USED_IN_COMPANY = 66055;
  257.     public const int USER_ID_ROLAND_TOTH = 45;
  258.     public const int USER_ID_B2B_HU = 6;
  259.     public const int USER_ID_B2B_CZ = 311;
  260.     public const int USER_ID_B2B_SK = 312;
  261.     public const int USER_ID_MEDIA_MARKT = 413;
  262.     public const int USER_ID_NORBERT_PINKE = 34;
  263.     public const int USER_ID_LASZLO_SZABO = 27;
  264.     public const int USER_ID_EX_PORT = 303;
  265.     public const int USER_ID_TAMAS_CSONTOS = 261;
  266.     public const int USER_ID_KATARINA_JOBBAGYOVA = 57;
  267.     public const int USER_ID_FANNI_ARGYUSIOVA = 58;
  268.     public const int USER_ID_PATRIK_IVAN = 88;
  269.     public const int USER_ID_UNAS = 373;
  270.     public const int USER_ID_MEDIAMARKT = 413;
  271.     public const int USER_ID_PC_COMPONENTES = 418;
  272.     public const string PERMISSION_ORDER_STATUS_ALL = 'order-status-all';
  273.     public const string PERMISSION_ORDER_STATUS_SALES = 'order-status-sales';
  274.     public const string PERMISSION_ORDER_STATUS_PRODUCTION = 'order-status-production';
  275.     /**
  276.      * @return array
  277.      */
  278.     public static function getRoleChoices(): array
  279.     {
  280.         return [
  281.             self::Type_SuperAdmin => self::Type_SuperAdmin,
  282.             self::Type_Admin => self::Type_Admin,
  283.             self::Type_User => self::Type_User,
  284.             self::Type_Employee => self::Type_Employee,
  285.         ];
  286.     }
  287.     /**
  288.      * @return array
  289.      */
  290.     public static function getPermissionModules(): array
  291.     {
  292.         return [
  293.             self::MODULE_ORDER => 'Order',
  294.             self::MODULE_BASKET => 'Basket',
  295.             self::MODULE_PRODUCT => 'Product',
  296.             self::MODULE_CUSTOMER => 'Customer',
  297.             self::MODULE_DOCUMENT => 'Document',
  298.             self::MODULE_STOCK => 'Stock',
  299.             self::MODULE_STOCK_MOVEMENT => 'Stock movement',
  300.             self::MODULE_STOCK_ITEM => 'Stock item',
  301.             self::MODULE_STATISTIC => 'Statistic',
  302.             self::MODULE_TASK => 'Task',
  303.             self::MODULE_FAQ => 'Knowledge base',
  304.             self::MODULE_CLAIM => 'Claim',
  305.             self::MODULE_USER => 'User',
  306.             self::MODULE_USER_DEPARTMENT => 'Department',
  307.             self::MODULE_MARKETING_TOOLS => 'Marketing tools',
  308.             self::MODULE_SHORTCUT => 'Shortcut',
  309.             self::MODULE_OTHER => 'Other',
  310.             self::MODULE_CENTRALIS_SETTINGS => 'Centralis settings'
  311.         ];
  312.     }
  313.     /**
  314.      * @return array
  315.      */
  316.     public static function getPermissionsByModules(): array
  317.     {
  318.         $modules = [];
  319.         foreach (self::getPermissionModules() as $module => $name) {
  320.             $modules[$module]['name'] = $name;
  321.             $modules[$module]['permissions'] = self::getPermissionsForModule($module);
  322.         }
  323.         return $modules;
  324.     }
  325.     /**
  326.      * @param string $module
  327.      *
  328.      * @return array
  329.      */
  330.     public static function getPermissionsForModule(string $module): array
  331.     {
  332.         $permissions = [];
  333.         if (in_array($module, array_keys(self::getPermissionModules()))) {
  334.             if (
  335.                 $module !== self::MODULE_STATISTIC &&
  336.                 $module !== self::MODULE_MARKETING_TOOLS &&
  337.                 $module !== self::MODULE_OTHER
  338.             ) {
  339.                 $permissions = [
  340.                     self::PERMISSION_LIST => 'List',
  341.                     self::PERMISSION_CREATE => 'Create',
  342.                     self::PERMISSION_READ => 'Read',
  343.                     self::PERMISSION_UPDATE => 'Update',
  344.                     self::PERMISSION_DELETE => 'Delete',
  345.                 ];
  346.             }
  347.             //Additional permissions for modules beside basic permissions
  348.             switch ($module) {
  349.                 case self::MODULE_ORDER:
  350.                     $permissions[self::PERMISSION_ORDER_STATUS_ALL] = 'Order all statuses';
  351.                     $permissions[self::PERMISSION_ORDER_STATUS_SALES] = 'Order sales statuses';
  352.                     $permissions[self::PERMISSION_ORDER_STATUS_PRODUCTION] = 'Order production statuses';
  353.                     $permissions[self::PERMISSION_STATS] = 'Statistics';
  354.                     $permissions[self::PERMISSION_BASKET] = 'Basket';
  355.                     $permissions[self::PERMISSION_PACKAGE_HANDOVER] = 'Package handover';
  356.                     $permissions[self::PERMISSION_COMMISSION] = 'Commission';
  357.                     $permissions[self::PERMISSION_COMMISSION_CONFIRMATION_MAIL] = 'Send commission confirmation mail';
  358.                     $permissions[self::PERMISSION_QUANTITY] = 'Sold quantity';
  359.                     $permissions[self::PERMISSION_AMAZON_IMPORT] = 'Amazon import';
  360.                     $permissions[self::PERMISSION_BACKMARKET_IMPORT] = 'Back Market import';
  361.                     $permissions[self::PERMISSION_REFURBED_IMPORT] = 'Refurbed import';
  362.                     $permissions[self::PERMISSION_CLAIM_FROM_ORDER] = 'Claim from order';
  363.                     $permissions[self::PERMISSION_WITHDRAWAL_FROM_ORDER] = 'Withdrawal from order';
  364.                     $permissions[self::PERMISSION_ORDER_PROFIT] = 'Order profit';
  365.                     $permissions[self::PERMISSION_ORDER_EXPORT] = 'Export';
  366.                     $permissions[self::PERMISSION_ORDER_SALES_EXPORT] = 'Order status export';
  367.                     $permissions[self::PERMISSION_DEBIT_CARD_EXPORT] = 'Debit card export';
  368.                     $permissions[self::PERMISSION_ORDER_STATUS] = 'Order status change';
  369.                     $permissions[self::PERMISSION_BILLINGO_PANEL] = 'Show billingo payment panel';
  370.                     $permissions[self::PERMISSION_PAYMENT_METHOD] = 'Menage payment methods';
  371.                     $permissions[self::PERMISSION_SHIPPING_METHOD] = 'Menage shipping methods';
  372.                     $permissions[self::PERMISSION_PICKUP_POINT] = 'Pickup point';
  373.                     $permissions[self::PERMISSION_SET_PRIORITY] = 'Set orders priority';
  374.                     $permissions[self::PERMISSION_ARTISJUS_LABEL_EXPORT] = 'Artisjus label export';
  375.                     $permissions[self::PERMISSION_MARKETPLACE_API] = 'Marketplace API';
  376.                     $permissions[self::PERMISSION_ORDER_PROCESSING] = 'Allow edit for processing & processable orders';
  377.                     $permissions[self::PERMISSION_SET_POSITION_TO_KISZOLGALAS] = 'Set positions to kiszolgalas';
  378.                     $permissions[self::PERMISSION_ORDER_PAID_ORDER_PRICE_EDITOR] = 'Order price edit good mode';
  379.                     $permissions[self::PERMISSION_ORDER_PASTPAY_RESERVATION_SYNC] = 'Pastpay reservation sync';
  380.                     $permissions[self::PERMISSION_PROCESSING_DASHBOARD] = 'Processing dashboard';
  381.                     $permissions[self::PERMISSION_PRODUCTION_STATION_EDITOR] = 'Production Station Editor';
  382.                     $permissions[self::PERMISSION_SHOW_FORCE_SAVING_LIST] = 'Force saving list';
  383.                     $permissions[self::PERMISSION_USE_PURCHASE_PRICE] = 'Use purchase prices for order';
  384.                     $permissions[self::PERMISSION_ORDER_MANAGE_ORDER_BY] = 'Manage order by';
  385.                     break;
  386.                 case self::MODULE_PRODUCT:
  387.                     $permissions[self::PERMISSION_OLD_ITEMS] = 'Old items on stock';
  388.                     $permissions[self::PERMISSION_PRODUCT_EXPORT] = 'Export';
  389.                     $permissions[self::PERMISSION_PRICE_IMPORT] = 'Product price import';
  390.                     $permissions[self::PERMISSION_PRODUCT_STOCK_MOVEMENTS] = 'Stock movements';
  391.                     $permissions[self::PERMISSION_PRODUCT_PURCHASE_PRICES] = 'Purchase prices';
  392.                     $permissions[self::PERMISSION_PRODUCT_STATISTICS] = 'Statistics';
  393.                     $permissions[self::PERMISSION_PRODUCT_DUPLICATE] = 'Duplicate';
  394.                     $permissions[self::PERMISSION_SUPPLIER_NAME] = 'Supplier name';
  395.                     $permissions[self::PERMISSION_ATTRIBUTES] = 'Attributes';
  396.                     $permissions[self::PERMISSION_VENDOR] = 'Vendor';
  397.                     $permissions[self::PERMISSION_PRODUCT_PRICE_MONITOR] = 'Price monitor';
  398.                     $permissions[self::PERMISSION_PRODUCT_DOMAIN] = 'Visible domains';
  399.                     $permissions[self::PERMISSION_PRODUCT_EXPORT_VIEW] = 'Product export by centralis codes';
  400.                     $permissions[self::PERMISSION_GENERATE_PRODUCT_OFFER_EMAIL] = 'Product offer email generate';
  401.                     $permissions[self::PERMISSION_UPLOAD_IMAGES_FOR_STOCK_ITEMS] = 'Upload images for stock items';
  402.                     $permissions[self::PERMISSION_PRODUCT_LAST_SALE] = 'Last sell of product';
  403.                     $permissions[self::PERMISSION_EXPORT_NOT_LISTED_PRODUCT] = 'Export not listed products';
  404.                     $permissions[self::PERMISSION_SET_ARCHIVED_SETTING] = 'Set archived setting';
  405.                     $permissions[self::PERMISSION_EXPORT_QUARANTINE_SERIALS] = 'Export quarantine serial numbers';
  406.                     $permissions[self::PERMISSION_EXPORT_NOTEBOOK_PARTS_FROM_SHIPMENTS] = 'Export notebook from shipments';
  407.                     $permissions[self::PERMISSION_PRODUCT_MODEL] = 'Product model';
  408.                     $permissions[self::PERMISSION_PRODUCT_VARIATION] = 'Product variations';
  409.                     $permissions[self::PERMISSION_PRODUCT_SPARE_PARTS] = 'Spare parts list';
  410.                     $permissions[self::PERMISSION_MARGIN_IMPORT] = 'Product margin level import';
  411.                     $permissions[self::PERMISSION_PRODUCT_EXPORT_PAYMENT_STATS] = 'Product export payment stats';
  412.                     $permissions[self::PERMISSION_PRODUCT_MODEL_CONNECTED_PRODUCT_IMPORT] = "Product model connected product import";
  413.                     break;
  414.                 case self::MODULE_CUSTOMER:
  415.                     $permissions[self::PERMISSION_CUSTOMER_FEED_LIST] = 'Feed list';
  416.                     $permissions[self::PERMISSION_ROUTE_PLANNER] = 'Route planner';
  417.                     $permissions[self::PERMISSION_PAYMENT_APPROVER] = 'Payment approver';
  418.                     $permissions[self::PERMISSION_PHONE_NUMBERS_EXPORT] = 'Phone numbers export';
  419.                     $permissions[self::PERMISSION_ADMIN_LOGIN_USAGE] = 'Admin Login usage';
  420.                     $permissions[self::PERMISSION_DEFAULT_DUE_DAYS_CHANGE] = 'Default due days change';
  421.                     $permissions[self::PERMISSION_CUSTOMER_PAYMENT_METHOD] = 'Menage payment methods';
  422.                     $permissions[self::PERMISSION_CUSTOMER_CALLBACK] = 'Manage customer callbacks';
  423.                     break;
  424.                 case self::MODULE_DOCUMENT:
  425.                     $permissions[self::PERMISSION_COMMITMENTS_RECEIVABLES_EXPORT] = 'Commitments Receivables export';
  426.                     $permissions[self::PERMISSION_ARTISJUS_PRODUCT_EXPORT] = 'Artisjus product export';
  427.                     $permissions[self::PERMISSION_DOCUMENT_EXPORT] = 'Document export';
  428.                     $permissions[self::PERMISSION_BILLINGO_DOCUMENTS] = 'Billingo documents';
  429.                     $permissions[self::PERMISSION_POHODA_EXPORT] = 'Pohoda export';
  430.                     $permissions[self::PERMISSION_SOLD_GOODS_FROM_SK_TO_HU] = 'Sold goods from SK to HU';
  431.                     $permissions[self::PERMISSION_EXCHANGE_RATES] = 'Exchange rates';
  432.                     $permissions[self::PERMISSION_PAYMENTS] = 'Payments';
  433.                     $permissions[self::PERMISSION_DOCUMENT_GROUPS] = 'Document groups';
  434.                     $permissions[self::PERMISSION_INVOICE_IN_TYPE] = 'In invoices';
  435.                     $permissions[self::PERMISSION_IN_DOCUMENT_NEXT_IT] = 'In invoices - NEXTIT';
  436.                     $permissions[self::PERMISSION_CREATE_CREDIT_NOTE] = 'Create credit note';
  437.                     $permissions[self::PERMISSION_PAYMENT_ADD] = 'Add payment function';
  438.                     $permissions[self::PERMISSION_FOREIGN_SALES_EXPORT] = 'Foreign sales export';
  439.                     $permissions[self::PERMISSION_CREDIT_NOTE_CREATE_MOVEMENT] = 'Credit note create movement for RMA';
  440.                     $permissions[self::PERMISSION_DOCUMENT_MOVEMENT_REMOVE] = 'Document remove stock movement';
  441.                     $permissions[self::PERMISSION_DOCUMENT_MOVEMENT_ADD] = 'Document add stock movement';
  442.                     $permissions[self::PERMISSION_UPDATE_LOCKED_INVOICE] = 'Update locked invoice';
  443.                     break;
  444.                 case self::MODULE_STOCK_MOVEMENT:
  445.                     $permissions[self::PERMISSION_IN_PRODUCTION_EXPORT] = 'In prod products export';
  446.                     $permissions[self::PERMISSION_STOCK_REVIEW] = 'Stock review';
  447.                     $permissions[self::PERMISSION_STOCK_REVIEW_DELETE] = 'Stock review delete';
  448.                     $permissions[self::PERMISSION_STOCK_REVIEW_CLOSE] = 'Stock review close';
  449.                     $permissions[self::PERMISSION_CORRECTIVE_MOVEMENT_CREATE] = 'Corrective movement create';
  450.                     $permissions[self::PERMISSION_CREATE_DATE_EDIT] = 'Create date edit';
  451.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_LOGS] = 'Stock movement logs';
  452.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_LOCK_ALL] = 'Manual lock & unlock';
  453.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_LOCK_CONFIG_CHANGE] = 'Only lock at Config_change';
  454.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_SERVICE_CONFIG_CHANGE] = 'Config_change for servicing';
  455.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_LOCK_IN_BASIC] = 'Only lock at (in)basic';
  456.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_CHANGE_PRODUCTION_STATUS] = 'Change production status';
  457.                     $permissions[self::PERMISSION_STOCK_POSITION_LABEL_PRINT] = 'Stock position label print';
  458.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_ONLY_SCAN_STOCK_ITEMS] = 'Only SCANNING';
  459.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_IN_UPDATED_ROWS] = 'Updated rows after update in IN';
  460.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_STOCK_REQUEST_ADMIN] = 'Stock request admin';
  461.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_CREATE_IN_PRODUCTION_MOVEMENT] = 'Create in production movement';
  462.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_EXPORT_ALL] = 'Export all and send in email';
  463.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_EXPORT_SHIPMENT_ITEM] = 'Export shipment items';
  464.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_CHANGE_CREDIT_NOTE_PRICES] = 'Change credit note prices';
  465.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_SHIPMENTS] = 'Shipments';
  466.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_CHANGE_SUBTYPE] = 'Change subtype';
  467.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_SERVICE_NEUTRAl_SUBTYPE_CHANGE] = 'Service change neutral subtype';
  468.                     $permissions[self::PERMISSION_EXPORT_SHIPMENTS] = 'Export shipments';
  469.                     $permissions[self::PERMISSION_STOCK_MOVEMENT_GODMODE_EDIT] = 'GodMode Editor';
  470.                     $permissions[self::PERMISSION_WANTED_ITEMS_LIST] = 'Wanted items list';
  471.                     $permissions[self::PERMISSION_WANTED_ITEMS_EDIT_FROM_LIST] = 'Edit wanted items from list';
  472.                     $permissions[self::PERMISSION_WANTED_ITEM_DELETE] = 'Delete wanted items from list';
  473.                     break;
  474.                 case self::MODULE_STOCK_ITEM:
  475.                     $permissions[self::PERMISSION_GROUP_LABEL_PRINT] = 'Group label print';
  476.                     $permissions[self::PERMISSION_POSITIONING] = 'Positioning';
  477.                     $permissions[self::PERMISSION_TEMPORARY_STOCK_POSITIONS] = 'Temporary stock positions';
  478.                     break;
  479.                 case self::MODULE_STOCK:
  480.                     $permissions[self::PERMISSION_STOCK_POSITION] = 'Stock positions';
  481.                     break;
  482.                 case self::MODULE_STATISTIC:
  483.                     $permissions[self::PERMISSION_INCOME_STATISTIC] = 'Income';
  484.                     $permissions[self::PERMISSION_SALES_MANAGER_STATISTIC] = 'Sales manager';
  485.                     $permissions[self::PERMISSION_SALES_MANAGER_PARTNER_STATISTIC] = 'Sales manager partner';
  486.                     $permissions[self::PERMISSION_EXPORT_SALES_MANAGER_STATISTIC] = 'Export sales manager';
  487.                     $permissions[self::PERMISSION_STOCK_MOVEMENTS_STATISTIC] = 'Stock movements';
  488.                     $permissions[self::PERMISSION_STOCK_STATUS_STATISTIC] = 'Stock status';
  489.                     $permissions[self::PERMISSION_COMMITMENTS_RECEIVABLES_STATISTIC] = 'Commitments receivables';
  490.                     $permissions[self::PERMISSION_DAYS_IN_STOCK_STATISTIC] = 'Days in stock';
  491.                     $permissions[self::PERMISSION_QUALITY_STATUS_STATISTIC] = 'Quality status';
  492.                     $permissions[self::PERMISSION_PRODUCTS_STATISTIC] = 'Products';
  493.                     $permissions[self::PERMISSION_PRODUCT_SALES_STATISTIC] = 'Product sales';
  494.                     $permissions[self::PERMISSION_SALES_MANAGER_INCOME_TURNOVER] = 'Sales manager income and turnover';
  495.                     $permissions[self::PERMISSION_CUSTOMERS_STATISTIC] = 'Customers';
  496.                     $permissions[self::PERMISSION_ONLINE_STOCK_STATISTIC] = 'Online stock';
  497.                     $permissions[self::PERMISSION_GUESTS_STATISTIC] = 'Guest';
  498.                     $permissions[self::PERMISSION_OLD_STOCK_ITEM_STATISTIC] = 'Old stock items';
  499.                     $permissions[self::PERMISSION_STATISTIC_CREDIT_NOTE_VALUES] = 'Credit note values';
  500.                     $permissions[self::PERMISSION_CLAIM_STATISTIC] = 'Claim';
  501.                     $permissions[self::PERMISSION_ORDER_STATUS_CHANGELOG_STATISTIC] = 'Order status changelog';
  502.                     $permissions[self::PERMISSION_ORDER_PRODUCT_CHANGELOG_STATISTIC] = 'Order product changelog';
  503.                     $permissions[self::PERMISSION_ORDER_ERROR_COMMENT_STATISTIC] = 'Order error comment list';
  504.                     $permissions[self::PERMISSION_PACKAGES] = 'Packages';
  505.                     $permissions[self::PERMISSION_STATISTIC_STOCK_POSITION] = 'Stock position';
  506.                     $permissions[self::PERMISSION_STATISTIC_STOCK_REQUEST_TIMES] = 'Stock request times';
  507.                     $permissions[self::PERMISSION_RAKTAR_AND_KALODA_STATISTIC] = 'Raktar and Kaloda positioning';
  508.                     $permissions[self::PERMISSION_MARKETPLACE_LISTINGS] = 'Marketplace listings';
  509.                     $permissions[self::PERMISSION_PROCESSING_STATISTIC] = 'Processing stats';
  510.                     $permissions[self::PERMISSION_NOTEBOOK_BATTERY_SKIN_STATISTICS] = 'Notebook battery skin statistics';
  511.                     break;
  512.                 case self::MODULE_USER:
  513.                     $permissions[self::PERMISSION_PERMISSION_LIST] = 'Permission list';
  514.                     $permissions[self::PERMISSION_PERMISSION_GROUPS] = 'Permission groups';
  515.                     $permissions[self::PERMISSION_PERMISSION_CHANGELOG] = 'Permission changelog';
  516.                     $permissions[self::PERMISSION_MEAL_ORDERING] = 'Meal ordering';
  517.                     $permissions[self::PERMISSION_MEAL_CREDIT_RECHARGE] = 'Meal credit recharge';
  518.                     $permissions[self::PERMISSION_DELETE_USER_ABSENCE] = 'Delete any user absence';
  519.                     $permissions[self::PERMISSION_USER_ABSENCE_STATISTICS] = 'User absence statistics';
  520.                     break;
  521.                 case self::MODULE_USER_DEPARTMENT:
  522.                     break;
  523.                 case self::MODULE_MARKETING_TOOLS:
  524.                     $permissions[self::PERMISSION_EDITING_PAGES] = 'Editing pages';
  525.                     $permissions[self::PERMISSION_NAVIGATION] = 'Navigation';
  526.                     $permissions[self::PERMISSION_SEARCH_ENGINE] = 'Search engine';
  527.                     $permissions[self::PERMISSION_BANNER] = 'Banner';
  528.                     $permissions[self::PERMISSION_NANOBAR] = 'Nanobar';
  529.                     $permissions[self::PERMISSION_PRODUCT_GROUPS] = 'Product groups';
  530.                     $permissions[self::PERMISSION_PRODUCT_TAGS] = 'Product tags';
  531.                     $permissions[self::PERMISSION_JOBS] = 'Jobs';
  532.                     $permissions[self::PERMISSION_REVIEWS] = 'Reviews';
  533.                     $permissions[self::PERMISSION_SURVEYS] = 'Surveys';
  534.                     $permissions[self::PERMISSION_COUPONS] = 'Coupons';
  535.                     $permissions[self::PERMISSION_UNAS_CHATGPT_TRANSLATION] = 'Unas translation';
  536.                     $permissions[self::PERMISSION_KLAVIYO_CAMPAIGNS] = 'Klaviyo campaigns';
  537.                     break;
  538.                 case self::MODULE_OTHER:
  539.                     $permissions[self::PERMISSION_TRANSLATIONS] = 'Translations';
  540.                     $permissions[self::PERMISSION_UPLOAD_FILE] = 'Upload file';
  541.                     $permissions[self::PERMISSION_INTERNAL_NEWS] = 'Internal news';
  542.                     $permissions[self::PERMISSION_AUTOMATIZATIONS] = 'Automatizations';
  543.                     $permissions[self::PERMISSION_ERROR_CODES] = 'Aiken error codes';
  544.                     $permissions[self::PERMISSION_ACCESS_LOG] = 'Access log';
  545.                     $permissions[self::PERMISSION_SHORTCUT] = 'Manage shortcuts';
  546.                     $permissions[self::PERMISSION_INTERNAL_JOBS] = 'Internal jobs';
  547.                     break;
  548.                 case self::MODULE_CLAIM:
  549.                     $permissions[self::PERMISSION_CLAIM_CREATE_LABEL] = 'Claim create label';
  550.             }
  551.         }
  552.         return $permissions;
  553.     }
  554.     /**
  555.      * @return array
  556.      */
  557.     public static function getBirthdayVisibilityChoices(): array
  558.     {
  559.         return [
  560.             'Show on dashboard, show number of years' => self::BIRTHDAY_VISIBILITY_ALL,
  561.             'Show on dashboard, dont show number of years' => self::BIRTHDAY_VISIBILITY_WITHOUT_YEAR,
  562.             'Dont show on dashboard' => self::BIRTHDAY_VISIBILITY_HIDDEN,
  563.         ];
  564.     }
  565.     /**
  566.      * @var string
  567.      *
  568.      * @Column(name="username", type="string", length=50)
  569.      */
  570.     private $username;
  571.     /**
  572.      * @var string
  573.      *
  574.      * @Column(name="password", type="string", length=200)
  575.      */
  576.     private $password;
  577.     /**
  578.      * @var string
  579.      *
  580.      * @Column(name="salt", type="string", length=100)
  581.      */
  582.     private $salt;
  583.     /**
  584.      * @var string
  585.      *
  586.      * @Column(name="email", type="string", length=255)
  587.      */
  588.     private $email;
  589.     /**
  590.      * @Column(type="text")
  591.      */
  592.     private $roles;
  593.     /**
  594.      * @Column(name="is_active", type="boolean")
  595.      */
  596.     private $isActive;
  597.     /**
  598.      * @var string
  599.      *
  600.      * @Column(name="first_name", type="string", length=255, nullable=true)
  601.      */
  602.     private $firstName;
  603.     /**
  604.      * @var string
  605.      *
  606.      * @Column(name="last_name", type="string", length=255, nullable=true)
  607.      */
  608.     private $lastName;
  609.     /**
  610.      * @var string
  611.      *
  612.      * @Column(name="nick_name", type="string", length=128, nullable=true)
  613.      */
  614.     private $nickName;
  615.     /**
  616.      * @var string
  617.      *
  618.      * @Column(name="locale", type="string", length=2)
  619.      */
  620.     private $locale = 'en';
  621.     /**
  622.      * @var \DateTime
  623.      *
  624.      * @Column(name="work_since", type="datetime", nullable=true)
  625.      */
  626.     private $workSince;
  627.     /**
  628.      * @var \DateTime
  629.      *
  630.      * @Column(name="work_until", type="datetime", nullable=true)
  631.      */
  632.     private $workUntil;
  633.     /**
  634.      * @var \DateTime
  635.      *
  636.      * @Column(name="birthday", type="datetime", nullable=true)
  637.      */
  638.     private $birthday;
  639.     /**
  640.      * @var integer
  641.      *
  642.      * @Column(name="allowedDaysOff", type="integer")
  643.      */
  644.     private $allowedDaysOff;
  645.     /**
  646.      * @var string
  647.      *
  648.      * @Column(name="phone", type="string", length=128, nullable=true)
  649.      */
  650.     private $phone;
  651.     /**
  652.      * @var ArrayCollection
  653.      *
  654.      * @OneToMany(
  655.      *     mappedBy="user",
  656.      *     targetEntity="ShipmentNotificationPreference"
  657.      * )
  658.      */
  659.     private Collection $shipmentNotificationPreferences;
  660.     /**
  661.      * @var ArrayCollection
  662.      *
  663.      * @OrderBy({"sortIndex" = "ASC"})
  664.      * @OneToMany(targetEntity="Dashboard", mappedBy="user", cascade={"persist", "remove"})
  665.      **/
  666.     private $dashboardWidgets;
  667.     /**
  668.      * @var array
  669.      *
  670.      * @OneToMany(targetEntity="UserPermission", mappedBy="user", cascade={"persist", "remove"})
  671.      **/
  672.     private $canView;
  673.     /**
  674.      * @var ArrayCollection
  675.      *
  676.      * @OneToMany(targetEntity="StockItem", mappedBy="tester", orphanRemoval=true)
  677.      **/
  678.     private $testedItems;
  679.     /**
  680.      * @var ArrayCollection
  681.      *
  682.      * @ManyToMany(targetEntity="UserDepartment", inversedBy="users")
  683.      * @JoinTable(
  684.      *  name="users_department",
  685.      *  joinColumns={
  686.      *      @JoinColumn(name="user_id", referencedColumnName="id")
  687.      *  },
  688.      *  inverseJoinColumns={
  689.      *      @JoinColumn(name="department_id", referencedColumnName="id")
  690.      *  })
  691.      */
  692.     private $departments;
  693.     /**
  694.      * @Column(name="sales_manager", type="boolean")
  695.      */
  696.     private $salesManager = false;
  697.     /**
  698.      * @Column(name="permissions", type="array", nullable=true)
  699.      */
  700.     private $permissions;
  701.     /**
  702.      * @OneToOne(targetEntity="UserStockPosition", mappedBy="user", cascade={"persist", "remove"})
  703.      */
  704.     private $temporaryStockPosition;
  705.     /**
  706.      * @var int
  707.      *
  708.      * @Column(name="birthday_visibility", type="integer")
  709.      */
  710.     private $birthdayVisibility = self::BIRTHDAY_VISIBILITY_ALL;
  711.     /**
  712.      * @OneToMany(targetEntity="UserPermissionChangeLog", mappedBy="user", orphanRemoval=true)
  713.      * @OrderBy({"created" = "DESC"})
  714.      */
  715.     private $permissionChangelog;
  716.     /**
  717.      * @var ArrayCollection
  718.      *
  719.      * @ManyToMany(targetEntity="User", inversedBy="subordinates")
  720.      * @JoinTable(
  721.      *  name="users_superior",
  722.      *  joinColumns={
  723.      *      @JoinColumn(name="user_id", referencedColumnName="id")
  724.      *  },
  725.      *  inverseJoinColumns={
  726.      *      @JoinColumn(name="superior_id", referencedColumnName="id")
  727.      *  })
  728.      */
  729.     private $superiors;
  730.     /**
  731.      * @var ArrayCollection
  732.      *
  733.      * @ManyToMany(targetEntity="User", mappedBy="superiors")
  734.      * @OrderBy({"created" = "DESC"})
  735.      */
  736.     private $subordinates;
  737.     /**
  738.      * @var ArrayCollection
  739.      *
  740.      * @ManyToMany(targetEntity="UserDepartment", mappedBy="teamLeaders")
  741.      */
  742.     private $managedDepartments;
  743.     /**
  744.      * @var string
  745.      *
  746.      * @Column(name="avatar", type="string", length=96, nullable=true)
  747.      */
  748.     private $avatar;
  749.     /**
  750.      * @var int|null
  751.      *
  752.      * @Column(name="fingera_id", type="integer", nullable=true)
  753.      */
  754.     private ?int $fingeraId;
  755.     /**
  756.      * @return bool
  757.      */
  758.     public function isAdminOrHas(string $access): bool
  759.     {
  760.         $roles = $this->getRoles();
  761.         return in_array('ROLE_ADMIN', $roles) || in_array($access, $roles);
  762.     }
  763.     /**
  764.      * @return bool
  765.      */
  766.     public function isAdmin(): bool
  767.     {
  768.         $roles = $this->getRoles();
  769.         return in_array('ROLE_ADMIN', $roles);
  770.     }
  771.     public function __construct()
  772.     {
  773.         $this->isActive = true;
  774.         $this->salt = md5(uniqid('', true));
  775.         $this->testedItems = new ArrayCollection();
  776.         $this->superiors = new ArrayCollection();
  777.         $this->subordinates = new ArrayCollection();
  778.         $this->departments = new ArrayCollection();
  779.         $this->managedDepartments = new ArrayCollection();
  780.         $this->shipmentNotificationPreferences = new ArrayCollection();
  781.     }
  782.     public function getUsername()
  783.     {
  784.         return $this->username;
  785.     }
  786.     public function setUsername($userName)
  787.     {
  788.         $this->username = $userName;
  789.     }
  790.     public function getSalt()
  791.     {
  792.         return $this->salt;
  793.     }
  794.     public function setPassword($encodedPassword)
  795.     {
  796.         return $this->password = $encodedPassword;
  797.     }
  798.     public function getPassword(): ?string
  799.     {
  800.         return $this->password;
  801.     }
  802.     /**
  803.      * @return integer
  804.      */
  805.     public function getIsActive()
  806.     {
  807.         return $this->isActive;
  808.     }
  809.     public function setIsActive($isActive)
  810.     {
  811.         $this->isActive = $isActive;
  812.     }
  813.     public function clearRole()
  814.     {
  815.         $this->roles = '';
  816.     }
  817.     public function addRole($role)
  818.     {
  819.         if ($this->roles <> '') {
  820.             $this->roles .= '|' . $role;
  821.         } else {
  822.             $this->roles = $role;
  823.         }
  824.     }
  825.     public function getRoles()
  826.     {
  827.         return explode('|', $this->roles);
  828.     }
  829.     public function eraseCredentials()
  830.     {
  831.     }
  832.     /**
  833.      * @return mixed
  834.      */
  835.     public function getEmail()
  836.     {
  837.         return $this->email;
  838.     }
  839.     /**
  840.      * @param mixed $email
  841.      */
  842.     public function setEmail($email)
  843.     {
  844.         $this->email = $email;
  845.     }
  846.     public function getDashboardWidgets()
  847.     {
  848.         return $this->dashboardWidgets;
  849.     }
  850.     public function getCanView()
  851.     {
  852.         return $this->canView;
  853.     }
  854.     /**
  855.      * @return string
  856.      */
  857.     public function getFirstName()
  858.     {
  859.         return $this->firstName;
  860.     }
  861.     /**
  862.      * @param string $firstName
  863.      */
  864.     public function setFirstName($firstName)
  865.     {
  866.         $this->firstName = $firstName;
  867.     }
  868.     /**
  869.      * @return string
  870.      */
  871.     public function getLastName()
  872.     {
  873.         return $this->lastName;
  874.     }
  875.     /**
  876.      * @param string $lastName
  877.      */
  878.     public function setLastName($lastName)
  879.     {
  880.         $this->lastName = $lastName;
  881.     }
  882.     /**
  883.      * @return string
  884.      */
  885.     public function getFullName(): string
  886.     {
  887.         return $this->firstName . ' ' . $this->lastName;
  888.     }
  889.     /**
  890.      * @return string
  891.      */
  892.     public function getNickName()
  893.     {
  894.         return $this->nickName;
  895.     }
  896.     /**
  897.      * @param string $nickName
  898.      */
  899.     public function setNickName($nickName)
  900.     {
  901.         $this->nickName = $nickName;
  902.     }
  903.     /**
  904.      * @return string
  905.      */
  906.     public function getLocale()
  907.     {
  908.         return $this->locale;
  909.     }
  910.     /**
  911.      * @param $locale
  912.      *
  913.      * @return $this
  914.      * @internal param string $lastName
  915.      */
  916.     public function setLocale($locale)
  917.     {
  918.         $this->locale = $locale;
  919.         return $this;
  920.     }
  921.     /**
  922.      * @return \DateTime
  923.      */
  924.     public function getWorkSince()
  925.     {
  926.         return $this->workSince;
  927.     }
  928.     /**
  929.      * @param \DateTime $workSince
  930.      */
  931.     public function setWorkSince($workSince)
  932.     {
  933.         $this->workSince = $workSince;
  934.     }
  935.     /**
  936.      * @return \DateTime
  937.      */
  938.     public function getWorkUntil()
  939.     {
  940.         return $this->workUntil;
  941.     }
  942.     /**
  943.      * @param \DateTime $workUntil
  944.      */
  945.     public function setWorkUntil($workUntil)
  946.     {
  947.         $this->workUntil = $workUntil;
  948.     }
  949.     /**
  950.      * @return \DateTime
  951.      */
  952.     public function getBirthday()
  953.     {
  954.         return $this->birthday;
  955.     }
  956.     /**
  957.      * @param \DateTime $birthday
  958.      */
  959.     public function setBirthday($birthday)
  960.     {
  961.         $this->birthday = $birthday;
  962.     }
  963.     /**
  964.      * @return int
  965.      */
  966.     public function getAllowedDaysOff()
  967.     {
  968.         return $this->allowedDaysOff;
  969.     }
  970.     /**
  971.      * @param int $allowedDaysOff
  972.      */
  973.     public function setAllowedDaysOff($allowedDaysOff)
  974.     {
  975.         $this->allowedDaysOff = $allowedDaysOff;
  976.     }
  977.     /**
  978.      * @return ArrayCollection
  979.      */
  980.     public function getTestedItems()
  981.     {
  982.         return $this->testedItems;
  983.     }
  984.     /**
  985.      * @return string
  986.      */
  987.     public function getPhone()
  988.     {
  989.         return $this->phone;
  990.     }
  991.     /**
  992.      * @param string $phone
  993.      */
  994.     public function setPhone($phone)
  995.     {
  996.         $this->phone = $phone;
  997.     }
  998.     /**
  999.      * Get all Departments
  1000.      *
  1001.      * @return ArrayCollection
  1002.      */
  1003.     public function getDepartments(): Collection
  1004.     {
  1005.         return $this->departments;
  1006.     }
  1007.     /**
  1008.      * @return array
  1009.      */
  1010.     public function getDepartmentIds(): array
  1011.     {
  1012.         $ids = [];
  1013.         foreach ($this->departments as $department) {
  1014.             $ids[] = $department->getId();
  1015.         }
  1016.         return $ids;
  1017.     }
  1018.     /**
  1019.      * Add a Department
  1020.      *
  1021.      * @param UserDepartment $department
  1022.      */
  1023.     public function addDepartment(UserDepartment $department): void
  1024.     {
  1025.         if (!$this->departments->contains($department)) {
  1026.             $this->departments->add($department);
  1027.         }
  1028.     }
  1029.     /**
  1030.      * Remove a Department
  1031.      *
  1032.      * @param UserDepartment $department
  1033.      */
  1034.     public function removeDepartment(UserDepartment $department): void
  1035.     {
  1036.         if ($this->departments->contains($department)) {
  1037.             $this->departments->removeElement($department);
  1038.         }
  1039.     }
  1040.     /**
  1041.      * Clear Departments
  1042.      */
  1043.     public function clearDepartments(): void
  1044.     {
  1045.         $this->departments->clear();
  1046.     }
  1047.     /**
  1048.      * @return bool
  1049.      */
  1050.     public function isSalesManager()
  1051.     {
  1052.         return $this->salesManager;
  1053.     }
  1054.     /**
  1055.      * @param bool $salesManager
  1056.      */
  1057.     public function setSalesManager($salesManager)
  1058.     {
  1059.         $this->salesManager = $salesManager;
  1060.     }
  1061.     /**
  1062.      * @return ArrayCollection
  1063.      */
  1064.     public function getManagedDepartments(): Collection
  1065.     {
  1066.         return $this->managedDepartments;
  1067.     }
  1068.     /**
  1069.      * @return array|null
  1070.      */
  1071.     public function getPermissions(): ?array
  1072.     {
  1073.         return $this->permissions;
  1074.     }
  1075.     /**
  1076.      * @param array|null $permissions
  1077.      */
  1078.     public function setPermissions(array $permissions = null)
  1079.     {
  1080.         $this->permissions = $permissions;
  1081.     }
  1082.     /**
  1083.      * @return array
  1084.      */
  1085.     public function getPermissionsByModule(string $module): ?array
  1086.     {
  1087.         $permissions = $this->getPermissions();
  1088.         return $permissions[$module] ?? [];
  1089.     }
  1090.     /**
  1091.      * @return UserStockPosition|null
  1092.      */
  1093.     public function getTemporaryStockPosition(): ?UserStockPosition
  1094.     {
  1095.         return $this->temporaryStockPosition;
  1096.     }
  1097.     /**
  1098.      * @param UserStockPosition|null
  1099.      */
  1100.     public function setTemporaryStockPosition(?UserStockPosition $userStockPosition): void
  1101.     {
  1102.         $this->temporaryStockPosition = $userStockPosition;
  1103.     }
  1104.     /**
  1105.      * @return int
  1106.      */
  1107.     public function getBirthdayVisibility()
  1108.     {
  1109.         return $this->birthdayVisibility;
  1110.     }
  1111.     /**
  1112.      * @param int $birthdayShow
  1113.      */
  1114.     public function setBirthdayVisibility($birthdayVisibility)
  1115.     {
  1116.         $this->birthdayVisibility = $birthdayVisibility;
  1117.     }
  1118.     /**
  1119.      * @return ArrayCollection
  1120.      */
  1121.     public function getPermissionChangelog(): Collection
  1122.     {
  1123.         return $this->permissionChangelog;
  1124.     }
  1125.     /**
  1126.      * @return bool
  1127.      */
  1128.     public function isDeveloper(): bool
  1129.     {
  1130.         if ($this->departments->count() > 0) {
  1131.             foreach ($this->departments as $department) {
  1132.                 if ($department->getId() == 4) {
  1133.                     return true;
  1134.                 }
  1135.             }
  1136.         }
  1137.         return false;
  1138.     }
  1139.     /**
  1140.      * @return bool
  1141.      */
  1142.     public function isPreparatory(): bool
  1143.     {
  1144.         if ($this->departments->count() > 0) {
  1145.             foreach ($this->departments as $department) {
  1146.                 if ($department->getId() == 14) {
  1147.                     return true;
  1148.                 }
  1149.             }
  1150.         }
  1151.         return false;
  1152.     }
  1153.     /**
  1154.      * @return bool
  1155.      */
  1156.     public function isTeamLeader(): bool
  1157.     {
  1158.         if ($this->departments->count() > 0) {
  1159.             foreach ($this->departments as $department) {
  1160.                 if ($department->getTeamLeaders()->count() > 0) {
  1161.                     foreach ($department->getTeamLeaders() as $teamLeader) {
  1162.                         if ($teamLeader->getId() == $this->getId()) {
  1163.                             return true;
  1164.                         }
  1165.                     }
  1166.                 }
  1167.             }
  1168.         }
  1169.         return false;
  1170.     }
  1171.     /**
  1172.      * @return bool
  1173.      */
  1174.     public function isFinancial(): bool
  1175.     {
  1176.         if ($this->departments->count() > 0) {
  1177.             foreach ($this->departments as $department) {
  1178.                 if (in_array($department->getId(), [8])) {
  1179.                     return true;
  1180.                 }
  1181.             }
  1182.         }
  1183.         return false;
  1184.     }
  1185.     /**
  1186.      * @return bool
  1187.      */
  1188.     public function isStockManagment(): bool
  1189.     {
  1190.         if ($this->departments->count() > 0) {
  1191.             foreach ($this->departments as $department) {
  1192.                 if ($department->getId() == 22) {
  1193.                     return true;
  1194.                 }
  1195.             }
  1196.         }
  1197.         return false;
  1198.     }
  1199.     /**
  1200.      * @return bool
  1201.      */
  1202.     public function isPackaging(): bool
  1203.     {
  1204.         if ($this->departments->count() > 0) {
  1205.             foreach ($this->departments as $department) {
  1206.                 if ($department->getId() == 30) {
  1207.                     return true;
  1208.                 }
  1209.             }
  1210.         }
  1211.         return false;
  1212.     }
  1213.     /**
  1214.      * @return bool
  1215.      */
  1216.     public function isSales(): bool
  1217.     {
  1218.         if ($this->departments->count() > 0) {
  1219.             foreach ($this->departments as $department) {
  1220.                 if (in_array($department->getId(), [25, 3, 27, 6, 12, 35, 26, 20, 21])) {
  1221.                     return true;
  1222.                 }
  1223.             }
  1224.         }
  1225.         return false;
  1226.     }
  1227.     public function isService(): bool
  1228.     {
  1229.         if ($this->departments->count() > 0) {
  1230.             /** @var UserDepartment $department */
  1231.             foreach ($this->departments as $department) {
  1232.                 if ($department->getId() == UserDepartment::DEPARTMENT_SERVICE_ID) {
  1233.                     return true;
  1234.                 }
  1235.             }
  1236.         }
  1237.         return false;
  1238.     }
  1239.     /**
  1240.      * Get all Superiors
  1241.      *
  1242.      * @return ArrayCollection
  1243.      */
  1244.     public function getSuperiors(): Collection
  1245.     {
  1246.         return $this->superiors;
  1247.     }
  1248.     /**
  1249.      * Add a Superiror
  1250.      *
  1251.      * @param User $superior
  1252.      */
  1253.     public function addSuperior(User $superior): void
  1254.     {
  1255.         if (!$this->superiors->contains($superior)) {
  1256.             $this->superiors->add($superior);
  1257.         }
  1258.     }
  1259.     /**
  1260.      * Remove a Superior
  1261.      *
  1262.      * @param User $superior
  1263.      */
  1264.     public function removeSuperior(User $superior): void
  1265.     {
  1266.         if ($this->superiors->contains($superior)) {
  1267.             $this->superiors->removeElement($superior);
  1268.         }
  1269.     }
  1270.     /**
  1271.      * Clear Superiors
  1272.      */
  1273.     public function clearSuperiors(): void
  1274.     {
  1275.         $this->superiors->clear();
  1276.     }
  1277.     /**
  1278.      * Get all Subordinates
  1279.      *
  1280.      * @return ArrayCollection
  1281.      */
  1282.     public function getSubordinates(): Collection
  1283.     {
  1284.         return $this->subordinates;
  1285.     }
  1286.     /**
  1287.      * Set Avatar
  1288.      *
  1289.      * @param string|null $avatar
  1290.      */
  1291.     public function setAvatar(?string $avatar = null): void
  1292.     {
  1293.         $this->avatar = $avatar;
  1294.     }
  1295.     /**
  1296.      * Get Avatar
  1297.      *
  1298.      * @return string|null
  1299.      */
  1300.     public function getAvatar(): ?string
  1301.     {
  1302.         return $this->avatar;
  1303.     }
  1304.     public function getMenuCacheKey(): string
  1305.     {
  1306.         return self::MENU_CACHE_KEY_PREFIX . $this->getId();
  1307.     }
  1308.     /**
  1309.      * @return int|null
  1310.      */
  1311.     public function getFingeraId(): int|null
  1312.     {
  1313.         return $this->fingeraId;
  1314.     }
  1315.     /**
  1316.      * @param int $fingeraId
  1317.      *
  1318.      * @return void
  1319.      */
  1320.     public function setFingeraId(?int $fingeraId): void
  1321.     {
  1322.         $this->fingeraId = $fingeraId;
  1323.     }
  1324.     /**
  1325.      * @return Collection<int, ShipmentNotificationPreference>
  1326.      */
  1327.     public function getShipmentNotificationPreferences(): Collection
  1328.     {
  1329.         return $this->shipmentNotificationPreferences;
  1330.     }
  1331. }