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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 
<?php
/* --------------------------------------------------------------
   CustomerAddressWriter.inc.php 2016-08-29
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2015 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

MainFactory::load_class('CustomerAddressWriterInterface');

/**
 * Class CustomerAddressWriter
 *
 * This class is used for writing customer address data into the database
 *
 * @category   System
 * @package    Customer
 * @subpackage Address
 * @implements CustomerAddressWriterInterface
 */
class CustomerAddressWriter implements CustomerAddressWriterInterface
{
    /**
     * @var CI_DB_query_builder
     */
    protected $db;


    /**
     * Constructor of the class CustomerAddressWriter
     *
     * @param CI_DB_query_builder $dbQueryBuilder
     */
    public function __construct(CI_DB_query_builder $dbQueryBuilder)
    {
        $this->db = $dbQueryBuilder;
    }


    /**
     * Calls the protected insert method to store the customer address into the database
     *
     * @param CustomerAddressInterface $address
     */
    public function write(CustomerAddressInterface $address)
    {
        $id = $address->getId();
        if(empty($id))
        {
            $this->_insert($address);
        }
        else
        {
            $this->_update($address);
        }
    }


    /**
     * Inserts the customer address into the database
     *
     * @param CustomerAddressInterface $address
     *
     * @return CustomerAddressInterface
     */
    protected function _insert(CustomerAddressInterface $address)
    {
        // Check for Country and Country Zone values.
        $countryId = ($address->getCountry() !== null) ? $address->getCountry()->getId() : null;
        $zoneName  = ($address->getCountryZone() !== null) ? $address->getCountryZone()->getName() : null;
        $zoneId    = ($address->getCountryZone() !== null) ? $address->getCountryZone()->getId() : null;

        $addressDataArray = array(
            'customers_id'          => (int)(string)$address->getCustomerId(),
            'entry_gender'          => (string)$address->getGender(),
            'entry_company'         => (string)$address->getCompany(),
            'entry_firstname'       => (string)$address->getFirstname(),
            'entry_lastname'        => (string)$address->getLastname(),
            'entry_street_address'  => (string)$address->getStreet(),
            'entry_house_number'    => (string)$address->getHouseNumber(),
            'entry_additional_info' => (string)$address->getAdditionalAddressInfo(),
            'entry_suburb'          => (string)$address->getSuburb(),
            'entry_postcode'        => (string)$address->getPostcode(),
            'entry_city'            => (string)$address->getCity(),
            'entry_state'           => (string)$zoneName,
            'entry_country_id'      => (int)$countryId,
            'entry_zone_id'         => (int)$zoneId,
            'customer_b2b_status'   => (int)(string)$address->getB2BStatus(),
            'address_date_added'    => date('Y-m-d'),
            'address_last_modified' => date('Y-m-d'),
            'address_class'         => (string)$address->getAddressClass(),
        );

        $this->db->insert('address_book', $addressDataArray);
        $address->setId(new IdType($this->db->insert_id()));

        return $address;
    }


    /**
     * Updates an existing customer address in the database
     *
     * @param CustomerAddressInterface $address
     *
     * @return CustomerAddressInterface
     */
    protected function _update(CustomerAddressInterface $address)
    {
        // Check for Country and Country Zone values.
        $countryId = ($address->getCountry() !== null) ? $address->getCountry()->getId() : null;
        $zoneName  = ($address->getCountryZone() !== null) ? $address->getCountryZone()->getName() : null;
        $zoneId    = ($address->getCountryZone() !== null) ? $address->getCountryZone()->getId() : null;

        $addressDataArray = array(
            'customers_id'          => (int)(string)$address->getCustomerId(),
            'entry_gender'          => (string)$address->getGender(),
            'entry_company'         => (string)$address->getCompany(),
            'entry_firstname'       => (string)$address->getFirstname(),
            'entry_lastname'        => (string)$address->getLastname(),
            'entry_street_address'  => (string)$address->getStreet(),
            'entry_house_number'    => (string)$address->getHouseNumber(),
            'entry_additional_info' => (string)$address->getAdditionalAddressInfo(),
            'entry_suburb'          => (string)$address->getSuburb(),
            'entry_postcode'        => (string)$address->getPostcode(),
            'entry_city'            => (string)$address->getCity(),
            'entry_state'           => (string)$zoneName,
            'entry_country_id'      => (int)$countryId,
            'entry_zone_id'         => (int)$zoneId,
            'customer_b2b_status'   => (int)(string)$address->getB2BStatus(),
            'address_last_modified' => date('Y-m-d'),
            'address_class'         => (string)$address->getAddressClass(),
        );

        $this->db->update('address_book', $addressDataArray,
                          array('address_book_id' => (int)(string)$address->getId()));

        return $address;
    }
}