1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 
<?php
/* --------------------------------------------------------------
   CustomerCountryZoneRepositoryInterface.inc.php 2017-03-20 gm
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2017 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

/**
 * Interface CustomerCountryZoneRepositoryInterface
 *
 * @category   System
 * @package    Customer
 * @subpackage Interfaces
 */
interface CustomerCountryZoneRepositoryInterface
{
    
    /**
     * Method to get a country zone with a given ID
     *
     * @param IdType $countryZoneId
     *
     * @throws Exception if country zone not found
     *
     * @return CustomerCountryZoneInterface
     */
    public function getById(IdType $countryZoneId);
    
    
    /**
     * Method to get a county zone with a given name and country
     *
     * @param CustomerCountryZoneNameInterface $countryZoneName
     * @param CustomerCountryInterface         $country
     *
     * @throws Exception if country zone not found
     *
     * @return CustomerCountryZoneInterface
     */
    public function getByNameAndCountry(CustomerCountryZoneNameInterface $countryZoneName,
                                        CustomerCountryInterface $country);
    
    
    /**
     * This method will get the country zone by its name and country if it exists, if not it will return null.
     *
     * @param CustomerCountryZoneNameInterface $countryZoneName
     * @param CustomerCountryInterface         $country
     *
     * @return CustomerCountryZone|null
     */
    public function findByNameAndCountry(CustomerCountryZoneNameInterface $countryZoneName,
                                         CustomerCountryInterface $country);
    
    
    /**
     * This method will get all country zones by a country ID if it exists, if not it will return an empty array.
     *
     * @param IdType $countryId
     *
     * @return array
     */
    public function findCountryZonesByCountryId(IdType $countryId);
    
    
    /**
     * Method to get a country zone by ID if exists else return null
     *
     * @param IdType $countryZoneId
     *
     * @return CustomerCountryZone|null
     */
    public function findById(IdType $countryZoneId);
    
    
    /**
     * This method will return a new CustomerCountryZoneName object representing an unknown country zone.
     * ID is 0 and ISO code is empty.
     *
     * @param CustomerCountryZoneNameInterface $countryZoneName
     *
     * @return CustomerCountryZone
     */
    public function getUnknownCountryZoneByName(CustomerCountryZoneNameInterface $countryZoneName);
    
    
    /**
     * This method returns whether the specified country, necessary, needs a state.
     *
     * @param IdType $countryId
     *
     * @return bool
     */
    public function isStateMandatory(IdType $countryId);
    
    
    /**
     * Finds the country zone by the given zone code and country.
     * Null will be returned if no results are found.
     *
     * @param \CustomerCountryZoneIsoCodeInterface $zoneCode Zone code of expected country zone.
     * @param \CustomerCountryInterface            $country  Country of zone.
     *
     * @return \CustomerCountryZoneInterface|null Country zone model.
     */
    public function findCountryZoneByZoneCodeAndCountry(CustomerCountryZoneIsoCodeInterface $zoneCode,
                                                        CustomerCountryInterface $country);
    
    
    /**
     * Returns the country zone by the given zone code and country id.
     * Null will be returned if no results are found.
     *
     * @param \CustomerCountryZoneIsoCodeInterface $zoneCode  Zone code of expected country zone.
     * @param \IdType                              $countryId Country id of zone.
     *
     * @return \CustomerCountryZoneInterface Country zone model.
     */
    public function findCountryZoneByZoneCodeAndCountryId(CustomerCountryZoneIsoCodeInterface $zoneCode,
                                                          IdType $countryId);
}