| Current Path : /home/megadansyp/www/components/com_eventgallery/library/ |
| Current File : /home/megadansyp/www/components/com_eventgallery/library/lineitemcontainer.php |
<?php
/**
* @package Sven.Bluege
* @subpackage com_eventgallery
*
* @copyright Copyright (C) 2005 - 2019 Sven Bluege All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die();
/**
* @property mixed cart
*/
abstract class EventgalleryLibraryLineitemcontainer extends EventgalleryLibraryDatabaseObject
{
/**
* @var EventgalleryLibraryAddress
*/
protected $_billingaddress = null;
/**
* @var EventgalleryTableCart
*/
protected $_lineitemcontainer = null;
/**
* @var string
*/
protected $_lineitemcontainer_table = null;
/**
* @var array
*/
protected $_lineitems = null;
/**
* A hash map, key = imagetype, value = Array<ImageLineItem>
*
* @var array
*/
protected $_lineitemImageTypeCache = null;
/**
* cache for the used image types
*
* @var array
*/
protected $_usedImageTypesCache = null;
/**
* @var array
*/
protected $_servicelineitems = null;
/**
* @var EventgalleryLibraryMethodsShipping
*/
protected $_shippingaddress = null;
/**
* @var EventgalleryLibraryMethodsSurcharge
*/
protected $_user_id = null;
/**
* @var EventgalleryLibraryFactoryImagelineitem
*/
protected $_imageLineItemFactory;
/**
* @var EventgalleryLibraryFactoryServicelineitem
*/
protected $_serviceLineItemFactory;
public function __construct()
{
$this->_imageLineItemFactory = EventgalleryLibraryFactoryImagelineitem::getInstance();
$this->_serviceLineItemFactory = EventgalleryLibraryFactoryServicelineitem::getInstance();
parent::__construct();
}
/**
* Use this method never in your source code. This is only for managers.
*
* @return array
*/
public function _getInternalDataObject()
{
return get_object_vars($this->_lineitemcontainer);
}
function deleteLineItem($lineItemId)
{
$this->deleteLineItems([$lineItemId]);
}
/**
* @param array $lineItemIds
*/
function deleteLineItems($lineItemIds) {
foreach ($lineItemIds as $lineItemId) {
if ($lineItemId == null) {
continue;
}
if ($this->getLineItem($lineItemId) == null) {
continue;
}
$this->_imageLineItemFactory->deleteLineItem($this->getId(), $lineItemId);
}
$this->_updateLineItemContainer();
}
/**
* @param $lineitemid
*
* @return EventgalleryLibraryImagelineitem
*/
public function getLineItem($lineitemid)
{
if (isset($this->_lineitems[$lineitemid])) {
return $this->_lineitems[$lineitemid];
} else {
return null;
}
}
/**
* Updates the cart object stucture from the database
*/
public function _updateLineItemContainer()
{
$this->_loadLineItems();
$this->_loadServiceLineItems();
}
/**
* @return EventgalleryLibraryAddress
*/
public function getBillingAddress()
{
/**
* @var EventgalleryLibraryFactoryAddress $addressFactory
*/
$addressFactory = EventgalleryLibraryFactoryAddress::getInstance();
if ($this->_billingaddress == null && $this->_lineitemcontainer->billingaddressid > 0) {
$this->_billingaddress = $addressFactory->getAddressById($this->_lineitemcontainer->billingaddressid);
}
return $this->_billingaddress;
}
/**
* @return string
*/
public function getEMail()
{
return $this->_lineitemcontainer->email;
}
/**
* @return int returns the current number of line items in this cart
*/
function getLineItemsCount()
{
return count($this->_lineitems);
}
/**
* @return int the sum of all quantities in this cart
*/
function getLineItemsTotalCount()
{
$count = 0;
/* @var EventgalleryLibraryLineitem $lineitem */
foreach ($this->getLineItems() as $lineitem) {
$count += $lineitem->getQuantity();
}
return $count;
}
/**
* @return EventgalleryLibraryImagelineitem[] all lineitems from this container
*/
function getLineItems()
{
return array_values($this->_lineitems);
}
/**
* Returns an array of lineitems with the given ImageType
*
* @param $imageType EventgalleryLibraryImagetype the imageType you want to get the lineitems for.
* @return array
*/
function getLineItemsByImageType($imageType) {
if (isset($this->_lineitemImageTypeCache[$imageType->getId()])) {
return $this->_lineitemImageTypeCache[$imageType->getId()];
}
return array();
}
/**
* returns an array containing the ImageTypes which are in use.
*
* @return array
*/
function getUsedImageTypes() {
return $this->_usedImageTypesCache;
}
/**
* @return string
*/
public function getMessage()
{
return $this->_lineitemcontainer->message;
}
/**
* @return EventgalleryLibraryServicelineitem|null
*/
public function getPaymentMethodServiceLineItem() {
foreach ($this->_servicelineitems as $servicelineitem) {
/**
* @var EventgalleryLibraryServicelineitem $servicelineitem
*/
if ($servicelineitem->isPaymentMethod()) {
return $servicelineitem;
}
}
return null;
}
/**
* @return EventgalleryLibraryMethodsPayment|null
*/
public function getPaymentMethod()
{
$sli = $this->getPaymentMethodServiceLineItem();
if ($sli) {
return $sli->getMethod();
}
return null;
}
/**
* @return string
*/
public function getPhone()
{
return $this->_lineitemcontainer->phone;
}
/**
* @return EventgalleryLibraryAddress
*/
public function getShippingAddress()
{
/**
* @var EventgalleryLibraryFactoryAddress $addressFactory
*/
$addressFactory = EventgalleryLibraryFactoryAddress::getInstance();
if ($this->_shippingaddress == null && $this->_lineitemcontainer->shippingaddressid > 0) {
$this->_shippingaddress = $addressFactory->getAddressById($this->_lineitemcontainer->shippingaddressid);
}
return $this->_shippingaddress;
}
/**
* @return EventgalleryLibraryServicelineitem|null
*/
public function getShippingMethodServiceLineItem() {
foreach ($this->_servicelineitems as $servicelineitem) {
/**
* @var EventgalleryLibraryServicelineitem $servicelineitem
*/
if ($servicelineitem->isShippingMethod()) {
return $servicelineitem;
}
}
return null;
}
/**
* @return EventgalleryLibraryMethodsShipping|null
*/
public function getShippingMethod()
{
$sli = $this->getShippingMethodServiceLineItem();
if ($sli) {
return $sli->getMethod();
}
return null;
}
/**
* @return EventgalleryLibraryCommonMoney
*/
public function getSubTotal()
{
return new EventgalleryLibraryCommonMoney($this->_lineitemcontainer->subtotal, $this->_lineitemcontainer->subtotalcurrency);
}
/**
* @return EventgalleryLibraryServicelineitem|null
*/
public function getSurchargeServiceLineItem() {
foreach ($this->_servicelineitems as $servicelineitem) {
/**
* @var EventgalleryLibraryServicelineitem $servicelineitem
*/
if ($servicelineitem->isSurcharge()) {
return $servicelineitem;
}
}
return null;
}
/**
* @return EventgalleryLibraryMethodsSurcharge|null
*/
public function getSurcharge()
{
$sli = $this->getSurchargeServiceLineItem();
if ($sli) {
return $sli->getMethod();
}
return null;
}
/**
* sets a surcharge
*
* @param EventgalleryLibraryMethodsSurcharge $surcharge
*/
public function setSurcharge($surcharge)
{
$this->_deleteMethodByType(EventgalleryLibraryServicelineitem::TYPE_SURCHARGE);
if ($surcharge == null) {
return;
}
/* @var EventgalleryLibraryFactoryServicelineitem $serviceLineItemFactory */
$serviceLineItemFactory = EventgalleryLibraryFactoryServicelineitem::getInstance();
$serviceLineItemFactory->createLineitem($this, $surcharge);
$this->_loadServiceLineItems();
}
/**
* @param int $methodtypeid
*/
protected function _deleteMethodByType($methodtypeid)
{
$this->_serviceLineItemFactory->deleteMethodTypeFromLineitemContainer($this->getId(), $methodtypeid);
$this->_loadServiceLineItems();
}
/**
* @return string
*/
public function getId()
{
return $this->_lineitemcontainer->id;
}
/**
* returns EventgalleryLibraryCommonMoney the tax amount
*/
public function getTax() {
$tax = 0;
/**
* @var EventgalleryLibraryLineitem $lineitem
*/
foreach($this->getLineItems() as $lineitem) {
/**
* @var EventgalleryLibraryLineitem $lineitem
*/
$tax += $lineitem->getTax()->getAmount();
}
if ($this->getShippingMethodServiceLineItem()) {
$tax += $this->getShippingMethodServiceLineItem()->getTax()->getAmount();
}
if ($this->getPaymentMethodServiceLineItem()) {
$tax += $this->getPaymentMethodServiceLineItem()->getTax()->getAmount();
}
if ($this->getSurchargeServiceLineItem()) {
$tax += $this->getSurchargeServiceLineItem()->getTax()->getAmount();
}
return new EventgalleryLibraryCommonMoney($tax, $this->_lineitemcontainer->subtotalcurrency);
}
/**
* @return EventgalleryLibraryCommonMoney
*/
public function getTotal()
{
return new EventgalleryLibraryCommonMoney($this->_lineitemcontainer->total, $this->_lineitemcontainer->totalcurrency);
}
/**
* @return string
*/
public function getUserId()
{
return $this->_lineitemcontainer->userid;
}
/**
* @return \Joomla\CMS\User\User|null
*/
public function getUser() {
$userid = $this->getUserId();
if (null == $userid) {
return null;
}
return \Joomla\CMS\Factory::getUser($userid);
}
/**
* @param EventgalleryLibraryAddress $billingAddress
*/
public function setBillingAddress($billingAddress)
{
$this->_billingaddress = null;
$this->_lineitemcontainer->billingaddressid = $billingAddress!=null?$billingAddress->getId():-1;
$this->_storeLineItemContainer();
}
protected function _storeLineItemContainer()
{
$data = $this->_lineitemcontainer;
$result = $this->store((array)$data, $this->_lineitemcontainer_table);
// set the new version number to avoid trouble while saving this item the next time.
if (isset($result->version) && isset($this->_lineitemcontainer->version)) {
$this->_lineitemcontainer->version = $result->version;
}
}
/**
* @param string $email
*/
public function setEMail($email)
{
$this->_lineitemcontainer->email = $email;
$this->_storeLineItemContainer();
}
/**
* @param string $message
*/
public function setMessage($message)
{
$this->_lineitemcontainer->message = $message;
$this->_storeLineItemContainer();
}
/**
* sets a Payment
*
* @param EventgalleryLibraryMethodsPayment $payment
*/
public function setPaymentMethod($paymentmethod)
{
// the payment method contains some data so we should not drop it if we want to use the same method again.
if ($paymentmethod != null && $this->getPaymentMethod() != null && $paymentmethod->getId() == $this->getPaymentMethod()->getId()) {
return;
}
$this->_deleteMethodByType(EventgalleryLibraryServicelineitem::TYPE_PAYMENTMETHOD);
if ($paymentmethod == null) {
return;
}
/* @var EventgalleryLibraryFactoryServicelineitem $serviceLineItemFactory */
$serviceLineItemFactory = EventgalleryLibraryFactoryServicelineitem::getInstance();
$serviceLineItemFactory->createLineitem($this, $paymentmethod);
$this->_loadServiceLineItems();
}
/**
* @param string $phone
*/
public function setPhone($phone)
{
$this->_lineitemcontainer->phone = $phone;
$this->_storeLineItemContainer();
}
/**
* @param EventgalleryLibraryAddress $shippingAddress
*/
public function setShippingAddress($shippingAddress)
{
$this->_shippingaddress = $shippingAddress;
$this->_lineitemcontainer->shippingaddressid = $shippingAddress!=null?$shippingAddress->getId():-1;
$this->_storeLineItemContainer();
}
/**
* @param $documentNumber
*/
public function setDocumentNumber($documentNumber)
{
$this->_lineitemcontainer->documentno = $documentNumber;
$this->_storeLineItemContainer();
}
/**
* sets a shipping
*
* @param EventgalleryLibraryMethodsShipping $shipping
*/
public function setShippingMethod($shipping)
{
$this->_deleteMethodByType(EventgalleryLibraryServicelineitem::TYPE_SHIPINGMETHOD);
if ($shipping == null) {
return;
}
/* @var EventgalleryLibraryFactoryServicelineitem $serviceLineItemFactory */
$serviceLineItemFactory = EventgalleryLibraryFactoryServicelineitem::getInstance();
$serviceLineItemFactory->createLineitem($this, $shipping);
$this->_loadServiceLineItems();
}
/**
* @param EventgalleryLibraryCommonMoney $price
*/
public function setSubTotal($price)
{
$this->_lineitemcontainer->subtotal = $price->getAmount();
$this->_lineitemcontainer->subtotalcurrency = $price->getCurrency();
$this->_storeLineItemContainer();
}
/**
* @param EventgalleryLibraryCommonMoney $price
*/
public function setTotal($price)
{
$this->_lineitemcontainer->total = $price->getAmount();
$this->_lineitemcontainer->totalcurrency = $price->getCurrency();
$this->_storeLineItemContainer();
}
/**
* loads lineitems from the database
*
*/
protected function _loadLineItems()
{
$this->_lineitemImageTypeCache = array();
$this->_usedImageTypesCache = array();
/**
* @var EventgalleryLibraryFactoryImagelineitem $imageLineItemFactory
* @var EventgalleryLibraryImagelineitem $lineitem
*/
$imageLineItemFactory = EventgalleryLibraryFactoryImagelineitem::getInstance();
$lineitems = $imageLineItemFactory->getLineItemsByLineItemContainerId($this->getId());
$indexedLineitems = array();
$this->_lineitemImageTypeCache = array();
foreach ($lineitems as $lineitem) {
$indexedLineitems[$lineitem->getId()] = $lineitem;
$imagetype = $lineitem->getImageType();
if (null != $imagetype) {
if (!isset($this->_lineitemImageTypeCache[$imagetype->getId()])) {
$this->_lineitemImageTypeCache[$imagetype->getId()] = array();
array_push($this->_usedImageTypesCache, $imagetype);
}
array_push($this->_lineitemImageTypeCache[$imagetype->getId()], $lineitem);
}
}
$this->_lineitems = $indexedLineitems;
}
/**
*/
protected function _loadServiceLineItems()
{
/**
* @var EventgalleryLibraryFactoryServicelineitem $serviceLineItemFactory
* @var EventgalleryLibraryServicelineitem $lineitem
*/
$serviceLineItemFactory = EventgalleryLibraryFactoryServicelineitem::getInstance();
$lineitems = $serviceLineItemFactory->getLineItemsByLineItemContainerId($this->getId());
$indexedLineitems = array();
foreach ($lineitems as $lineitem) {
$indexedLineitems[$lineitem->getId()] = $lineitem;
}
$this->_servicelineitems = $indexedLineitems;
}
/**
* @return array|null
*/
public function getServiceLineItems() {
return $this->_servicelineitems;
}
public function getCreationDate() {
return $this->_lineitemcontainer->created;
}
public function getModificationDate() {
return $this->_lineitemcontainer->modified;
}
public function getDocumentNumber() {
return $this->_lineitemcontainer->documentno;
}
public function getType() {
$digital = false;
$physical = false;
foreach($this->getLineItems() as $imagelineitem) {
/**
* @var EventgalleryLibraryImagelineitem $imagelineitem
*/
if ($imagelineitem->getImageType()->isDigital()) {
$digital = true;
} else {
$physical = true;
}
}
if ($digital && $physical) {
return EventgalleryLibraryEnumBaskettype::TYPE_MIXED;
}
if ($digital) {
return EventgalleryLibraryEnumBaskettype::TYPE_DIGITAL;
}
return EventgalleryLibraryEnumBaskettype::TYPE_PHYSICAL;
}
public function getFirstname() {
return $this->_lineitemcontainer->firstname;
}
public function getLastname() {
return $this->_lineitemcontainer->lastname;
}
/**
* @param string $email
*/
public function setFirstname($firstname)
{
$this->_lineitemcontainer->firstname = $firstname;
$this->_storeLineItemContainer();
}
/**
* @param string $email
*/
public function setLastname($lastname)
{
$this->_lineitemcontainer->lastname = $lastname;
$this->_storeLineItemContainer();
}
}