| 1 |  |  | <?php | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  | declare(strict_types=1); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | namespace LauLamanApps\IzettleApi; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  | use LauLamanApps\IzettleApi\API\Product\Category; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  | use LauLamanApps\IzettleApi\API\Product\Discount; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  | use LauLamanApps\IzettleApi\API\Product\Library; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  | use LauLamanApps\IzettleApi\API\Product\Product; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  | use LauLamanApps\IzettleApi\Client\Product\CategoryParser; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  | use LauLamanApps\IzettleApi\Client\Product\DiscountParser; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  | use LauLamanApps\IzettleApi\Client\Product\LibraryParser; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  | use LauLamanApps\IzettleApi\Client\Product\ProductParser; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  | final class ProductClient extends AbstractClient | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  | { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  |     const BASE_URL = 'https://products.izettle.com/organizations/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  |     const POST_CATEGORY = self::BASE_URL . '/categories'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  |     const GET_CATEGORY = self::BASE_URL . '/categories/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  |     const GET_CATEGORIES = self::BASE_URL . '/categories'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  |     const POST_DISCOUNT = self::BASE_URL . '/discounts'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  |     const GET_DISCOUNT = self::BASE_URL . '/discounts/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  |     const PUT_DISCOUNT = self::BASE_URL . '/discounts/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  |     const DELETE_DISCOUNT = self::BASE_URL . '/discounts/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  |     const GET_DISCOUNTS = self::BASE_URL . '/discounts'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  |     const GET_EXPORT = self::BASE_URL . '/products/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  |     const GET_EXPORT_TEMPLATE = self::BASE_URL . '/products/%s/template'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  |     const GET_LIBRARY = self::BASE_URL . '/library'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 |  |  |     const POST_PRODUCT = self::BASE_URL . '/products'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 |  |  |     const GET_PRODUCT = self::BASE_URL . '/products/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 |  |  |     const PUT_PRODUCT = self::BASE_URL . '/products/v2/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 38 |  |  |     const DELETE_PRODUCT = self::BASE_URL . '/products/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 39 |  |  |     const POST_PRODUCT_VARIANT = self::BASE_URL . '/products/%s/variants'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 40 |  |  |     const PUT_PRODUCT_VARIANT = self::BASE_URL . '/products/%s/variants/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 |  |  |     const DELETE_PRODUCT_VARIANT = self::BASE_URL . '/products/%s/variants/%s'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 |  |  |     const GET_PRODUCTS = self::BASE_URL . '/products'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  |     const DELETE_PRODUCTS = self::BASE_URL . '/products'; | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 44 |  |  |  | 
            
                                                                        
                            
            
                                    
            
            
                | 45 | 1 |  |     public function getCategories(): array | 
            
                                                                        
                            
            
                                    
            
            
                | 46 |  |  |     { | 
            
                                                                        
                            
            
                                    
            
            
                | 47 | 1 |  |         $url = sprintf(self::GET_CATEGORIES, $this->getOrganizationUuid()); | 
            
                                                                        
                            
            
                                    
            
            
                | 48 |  |  |  | 
            
                                                                        
                            
            
                                    
            
            
                | 49 | 1 |  |         return CategoryParser::createFromResponse($this->get($url)); | 
            
                                                                        
                            
            
                                    
            
            
                | 50 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 51 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 52 | 1 |  |     public function createCategory(Category $category): void | 
            
                                                                                                            
                            
            
                                    
            
            
                | 53 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 54 | 1 |  |         $url = sprintf(self::POST_CATEGORY, $this->getOrganizationUuid()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 55 | 1 |  |         $this->post($url, $category->getCreateData()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 56 | 1 |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 57 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 58 | 1 |  |     public function getDiscounts(): array | 
            
                                                                                                            
                            
            
                                    
            
            
                | 59 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 60 | 1 |  |         $url = sprintf(self::GET_DISCOUNTS, $this->getOrganizationUuid()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 61 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 62 | 1 |  |         return DiscountParser::createFromResponse($this->get($url)); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 63 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 64 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 65 | 1 |  |     public function createDiscount(Discount $discount): void | 
            
                                                                                                            
                            
            
                                    
            
            
                | 66 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 67 | 1 |  |         $url = sprintf(self::POST_DISCOUNT, $this->getOrganizationUuid()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 68 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 69 | 1 |  |         $this->post($url, $discount->getCreateData()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 70 | 1 |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 71 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 72 | 1 |  |     public function deleteDiscount(Discount $discount): void | 
            
                                                                                                            
                            
            
                                    
            
            
                | 73 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 74 | 1 |  |         $url = sprintf(self::DELETE_DISCOUNT, $this->getOrganizationUuid(), (string) $discount->getUuid()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 75 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 76 | 1 |  |         $this->delete($url); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 77 | 1 |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 78 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 79 | 1 |  |     public function getLibrary(): Library | 
            
                                                                                                            
                            
            
                                    
            
            
                | 80 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 81 | 1 |  |         $url = sprintf(self::GET_LIBRARY, $this->getOrganizationUuid()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 82 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 83 | 1 |  |         return LibraryParser::createFromResponse($this->get($url)); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 84 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 85 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 86 | 1 |  |     public function getProducts(): array | 
            
                                                                                                            
                            
            
                                    
            
            
                | 87 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 88 | 1 |  |         $url = sprintf(self::GET_PRODUCTS, $this->getOrganizationUuid()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 89 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 90 | 1 |  |         return ProductParser::createFromResponse($this->get($url)); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 91 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 92 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 93 | 1 |  |     public function createProduct(Product $product): void | 
            
                                                                                                            
                            
            
                                    
            
            
                | 94 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 95 | 1 |  |         $url = sprintf(self::POST_PRODUCT, $this->getOrganizationUuid()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 96 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 97 | 1 |  |         $this->post($url, $product->getCreateData()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 98 | 1 |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 99 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 100 | 1 |  |     public function deleteProduct(Product $product): void | 
            
                                                                                                            
                            
            
                                    
            
            
                | 101 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 102 | 1 |  |         $url = sprintf(self::DELETE_PRODUCT, $this->getOrganizationUuid(), (string) $product->getUuid()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 103 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 104 | 1 |  |         $this->delete($url); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 105 | 1 |  |     } | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 106 |  |  | } | 
            
                                                        
            
                                    
            
            
                | 107 |  |  |  |