Bläddra i källkod

Merge branch 'develop'

master^2
Guillaume 2 år sedan
förälder
incheckning
a2da5dec3c
23 ändrade filer med 637 tillägg och 451 borttagningar
  1. +1
    -0
      ShopBundle/Controller/Backend/OrderController.php
  2. +2
    -1
      ShopBundle/Controller/Backend/ProductFamilyController.php
  3. +19
    -0
      ShopBundle/Form/Frontend/TicketMessageType.php
  4. +1
    -0
      ShopBundle/Model/ProductFamily.php
  5. +269
    -248
      ShopBundle/Repository/OrderShopRepository.php
  6. +3
    -0
      ShopBundle/Repository/ReductionCatalogRepository.php
  7. +2
    -0
      ShopBundle/Resources/public/css/backend/ekko-lightbox/ekko-ligthbox.min.css
  8. +2
    -0
      ShopBundle/Resources/public/js/backend/plugin/ekko-lightbox/ekko-lightbox.min.js
  9. +5
    -0
      ShopBundle/Resources/public/js/backend/script/default/init-common.js
  10. +1
    -1
      ShopBundle/Resources/public/js/backend/script/default/init-list.js
  11. +1
    -1
      ShopBundle/Resources/public/js/backend/script/order/vuejs-order.js
  12. +3
    -1
      ShopBundle/Resources/translations/lcshop.fr.yaml
  13. +5
    -4
      ShopBundle/Resources/views/backend/default/sortable.html.twig
  14. +9
    -10
      ShopBundle/Resources/views/backend/productfamily/macros.html.twig
  15. +17
    -1
      ShopBundle/Resources/views/backend/ticket/show.html.twig
  16. +1
    -1
      ShopBundle/Resources/views/backend/user/macros.html.twig
  17. +1
    -11
      ShopBundle/Services/MailjetSmsUtils.php
  18. +1
    -1
      ShopBundle/Services/Price/OrderProductPriceUtils.php
  19. +103
    -0
      ShopBundle/Services/SmsFactorUtils.php
  20. +180
    -170
      ShopBundle/Services/TicketUtils.php
  21. +1
    -0
      ShopBundle/Services/Utils.php
  22. +9
    -1
      ShopBundle/Services/UtilsManager.php
  23. +1
    -0
      ShopBundle/Statistic/Statistic.php

+ 1
- 0
ShopBundle/Controller/Backend/OrderController.php Visa fil

@@ -459,6 +459,7 @@ class OrderController extends AdminController
$parameters['form_order_send_payment_link'] = $this->createCustomForm(OrderSendPaymentLink::class, 'orderSendPaymentLink', $parameters)->createView();
break;
case OrderStatus::ALIAS_ERROR_PAYMENT_ONLINE :
case OrderStatus::ALIAS_PARTIAL_PAYMENT :
case OrderStatus::ALIAS_WAITING_PAYMENT_ONLINE :
$parameters['form_order_send_payment_link'] = $this->createCustomForm(OrderSendPaymentLink::class, 'orderSendPaymentLink', $parameters)->createView();
$parameters['form_order_payment'] = $this->createCustomForm(OrderPaymentType::class, 'orderPayment', $parameters, false)->createView();

+ 2
- 1
ShopBundle/Controller/Backend/ProductFamilyController.php Visa fil

@@ -139,7 +139,8 @@ class ProductFamilyController extends AdminController
'choices' => array(
'field.ProductFamily.organicLabelOptions.' . ProductFamily::PROPERTY_ORGANIC_LABEL_AB => ProductFamily::PROPERTY_ORGANIC_LABEL_AB,
'field.ProductFamily.organicLabelOptions.' . ProductFamily::PROPERTY_ORGANIC_LABEL_NP => ProductFamily::PROPERTY_ORGANIC_LABEL_NP,
'field.ProductFamily.organicLabelOptions.' . ProductFamily::PROPERTY_ORGANIC_LABEL_HVE => ProductFamily::PROPERTY_ORGANIC_LABEL_HVE
'field.ProductFamily.organicLabelOptions.' . ProductFamily::PROPERTY_ORGANIC_LABEL_HVE => ProductFamily::PROPERTY_ORGANIC_LABEL_HVE,
'field.ProductFamily.organicLabelOptions.' . ProductFamily::PROPERTY_ORGANIC_LABEL_TVVR => ProductFamily::PROPERTY_ORGANIC_LABEL_TVVR
),
'translation_domain' => 'lcshop',
'multiple' => false,

+ 19
- 0
ShopBundle/Form/Frontend/TicketMessageType.php Visa fil

@@ -12,11 +12,13 @@ use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Validator\Constraints\File;

class TicketMessageType extends AbstractType
{
@@ -28,6 +30,23 @@ class TicketMessageType extends AbstractType
'label' => 'field.Ticket.yourAnswer',
'translation_domain' => 'lcshop',
])
->add('image', FileType::class, [
'label' => 'Photo',
'mapped' => false,
'required' => false,
'constraints' => [
new File([
'maxSize' => '2048k',
'mimeTypes' => [
'image/png',
'image/jpeg',
'image/jpg',
'image/gif',
],
'mimeTypesMessage' => "Mauvais format d'image (formats acceptés : jpeg, png, gif)",
])
],
])
->add('closeTicket', CheckboxType::class, [
'label' => 'field.Ticket.closeTicket',
'translation_domain' => 'lcshop',

+ 1
- 0
ShopBundle/Model/ProductFamily.php Visa fil

@@ -47,6 +47,7 @@ abstract class ProductFamily extends AbstractDocumentEntity implements ProductPr
const PROPERTY_ORGANIC_LABEL_AB = 'ab';
const PROPERTY_ORGANIC_LABEL_NP = 'nature-progres';
const PROPERTY_ORGANIC_LABEL_HVE = 'hve';
const PROPERTY_ORGANIC_LABEL_TVVR = 'tvvr';

const TYPE_EXPIRATION_DATE_DLC = 'dlc';
const TYPE_EXPIRATION_DATE_DDM = 'ddm';

+ 269
- 248
ShopBundle/Repository/OrderShopRepository.php Visa fil

@@ -20,298 +20,319 @@ use Lc\ShopBundle\Model\OrderStatus;
class OrderShopRepository extends BaseRepository implements DefaultRepositoryInterface
{

public function getInterfaceClass()
{
return OrderShopInterface::class;
public function getInterfaceClass()
{
return OrderShopInterface::class;
}

public function countValidOrderWithReductionCredit($reductionCredit, $user = null)
{
$query = $this->findByMerchantQuery();
$query = $this->filterOrderValid($query);
$query->select('count(e.id)');
if ($user) {
$query->andWhere('e.user = :user');
$query->setParameter('user', $user);
}
$query->innerJoin('e.orderReductionCredits', 'orc');
$query->andWhere('orc.reductionCredit = :reductionCredit');
$query->setParameter('reductionCredit', $reductionCredit);

public function countValidOrderWithReductionCredit($reductionCredit, $user=null)
{
$query = $this->findByMerchantQuery();
$query = $this->filterOrderValid($query);
$query->select('count(e.id)');
if($user) {
$query->andWhere('e.user = :user');
$query->setParameter('user', $user);
}
$query->innerJoin('e.orderReductionCredits', 'orc');
$query->andWhere('orc.reductionCredit = :reductionCredit');
$query->setParameter('reductionCredit', $reductionCredit);
return $query->getQuery()->getSingleScalarResult();
}

return $query->getQuery()->getSingleScalarResult();

public function countValidOrderWithReductionCart($reductionCart)
{
$query = $this->findByMerchantQuery();
$query = $this->filterOrderValid($query);
$query->select('count(e.id)');
$query->join('e.orderReductionCarts', 'orc');
$query->andWhere('orc.reductionCart = :reductionCart');
$query->setParameter('reductionCart', $reductionCart);

return $query->getQuery()->getSingleScalarResult();
}


public function countValidOrderWithReductionCartPerUser($reductionCart, $user)
{
$query = $this->findByMerchantQuery();
$query = $this->filterOrderValid($query);
$query->select('count(e.id)');
$query->andWhere('e.user = :user');
$query->join('e.orderReductionCarts', 'orc');
$query->andWhere('orc.reductionCart = :reductionCart');
$query->setParameter('reductionCart', $reductionCart);
$query->setParameter('user', $user);

return $query->getQuery()->getSingleScalarResult();
}


public function filterOrderWaitingDelivery($query)
{
return $this->_filterOrderStatus($query, OrderStatus::$statusAliasWaitingDelivery);
}

public function filterOrderCart($query)
{
return $this->_filterOrderStatus($query, OrderStatus::$statusAliasAsCart);
}

public function filterOrderValid(?QueryBuilder $query): QueryBuilder
{
return $this->_filterOrderStatus($query, OrderStatus::$statusAliasAsValid);
}

private function _filterOrderStatus($query, $statusArray)
{
$query->leftJoin('e.orderStatus', 'os');
$query->andWhere('os.alias IN (:alias)');
$query->setParameter('alias', $statusArray);

return $query;
}

public function findCartCurrent($params)
{
$query = $this->findByMerchantQuery();


if (isset($params['user'])) {
$query->andWhere('e.user = :user')->setParameter('user', $params['user']);
}

if (isset($params['visitor'])) {
$query->andWhere('e.visitor = :visitor')->setParameter('visitor', $params['visitor']);
}

$query = $this->filterOrderCart($query);

$query->leftJoin('e.orderReductionCarts', 'orderReductionCarts')
->addSelect('orderReductionCarts');

public function countValidOrderWithReductionCart($reductionCart)
{
$query = $this->findByMerchantQuery();
$query = $this->filterOrderValid($query);
$query->select('count(e.id)');
$query->join('e.orderReductionCarts', 'orc');
$query->andWhere('orc.reductionCart = :reductionCart');
$query->setParameter('reductionCart', $reductionCart);
return $query->getQuery()->getSingleScalarResult();
$results = $query->getQuery()->getResult();

if ($results) {
return $results[0];
}

return null;
}

public function findAllBy($params = [])
{
if (isset($params['merchant'])) {
$query = $this->findByMerchantQuery($params['merchant']);
} else {
$query = $this->findByMerchantQuery();
}

if (isset($params['count']) && $params['count']) {
$query->select('count(e.id)');
}

public function countValidOrderWithReductionCartPerUser($reductionCart, $user)
{
$query = $this->findByMerchantQuery();
$query = $this->filterOrderValid($query);
$query->select('count(e.id)');
$query->andWhere('e.user = :user');
$query->join('e.orderReductionCarts', 'orc');
$query->andWhere('orc.reductionCart = :reductionCart');
$query->setParameter('reductionCart', $reductionCart);
$query->setParameter('user', $user);
return $query->getQuery()->getSingleScalarResult();
if (isset($params['select'])) {
$query->select($params['select']);
}

if (isset($params['section'])) {
$query = $query->andWhere('e.section = :section')->setParameter('section', $params['section']);
}

if (isset($params['dateStart']) || isset($params['dateEnd'])) {
$params['dateField'] = isset($params['dateField']) ? $params['dateField'] : 'validationDate';
}

public function filterOrderWaitingDelivery($query)
{
return $this->_filterOrderStatus($query, OrderStatus::$statusAliasWaitingDelivery) ;
if (isset($params['dateStart'])) {
$query->andWhere('e.'.$params['dateField'].' >= :dateStart')->setParameter(
'dateStart',
$params['dateStart']
);
}
if (isset($params['dateEnd'])) {
$query->andWhere('e.'.$params['dateField'].' <= :dateEnd')->setParameter('dateEnd', $params['dateEnd']);
}

public function filterOrderCart($query)
{
return $this->_filterOrderStatus($query, OrderStatus::$statusAliasAsCart) ;
if (isset($params['weekNumber'])) {
$query->andWhere('e.weekNumber = :weekNumber')->setParameter('weekNumber', $params['weekNumber']);
$currentYear = new \DateTime();
$currentYear->setDate($currentYear->format('Y'), 1, 1);
$query->andWhere('e.validationDate >= :now')->setParameter('now', $currentYear);
}
public function filterOrderValid(?QueryBuilder $query): QueryBuilder
{
return $this->_filterOrderStatus($query, OrderStatus::$statusAliasAsValid) ;
if (isset($params['isCart'])) {
$query = $this->filterOrderCart($query);
}

private function _filterOrderStatus($query, $statusArray) {
$query->leftJoin('e.orderStatus', 'os');
$query->andWhere('os.alias IN (:alias)');
$query->setParameter('alias',$statusArray);
return $query ;
if (isset($params['isValid'])) {
$query = $this->filterOrderValid($query);
}

public function findCartCurrent($params)
{
$query = $this->findByMerchantQuery();
if (isset($params['isWaitingDelivery'])) {
$query = $this->filterOrderWaitingDelivery($query);
}

if (isset($params['orderStatus'])) {
$query->leftJoin('e.orderStatus', 'os');
$query->andWhere('os.alias LIKE :alias');
$query->setParameter('alias', $params['orderStatus']);
}

if (isset($params['user'])) {
$query->andWhere('e.user = :user')->setParameter('user', $params['user']);
}
if (isset($params['user'])) {
$query->andWhere('e.user = :user')->setParameter('user', $params['user']);
}

if (isset($params['visitor'])) {
$query->andWhere('e.visitor = :visitor')->setParameter('visitor', $params['visitor']);
}
if (isset($params['address'])) {
$query->andWhere('e.deliveryAddress = :address OR e.invoiceAddress = :address')->setParameter(
'address',
$params['address']
);
}

$query = $this->filterOrderCart($query);
if (isset($params['weekDeliveryTrucks'])) {
$query->andWhere('e.weekDeliveryTruck IN (:weekDeliveryTrucks)')->setParameter(
'weekDeliveryTrucks',
$params['weekDeliveryTrucks']
);
}

$query->leftJoin('e.orderReductionCarts', 'orderReductionCarts')
->addSelect('orderReductionCarts');
if (isset($params['estimatedDeliveryDateTime'])) {
$query->andWhere('e.estimatedDeliveryDateTime >= :deliveryDateStart');
$query->andWhere('e.estimatedDeliveryDateTime < :deliveryDateEnd');
$date = clone $params['estimatedDeliveryDateTime'];
$query->setParameter('deliveryDateStart', $date->format('Y-m-d 00:00:00'));
$query->setParameter('deliveryDateEnd', $date->modify('+1 day')->format('Y-m-d 00:00:00'));
}

$results = $query->getQuery()->getResult();
if (isset($params['deliveryDate'])) {
$query->andWhere('e.deliveryDate >= :deliveryDateStart');
$query->andWhere('e.deliveryDate < :deliveryDateEnd');
$date = clone $params['deliveryDate'];
$query->setParameter('deliveryDateStart', $date->format('Y-m-d 00:00:00'));
$query->setParameter('deliveryDateEnd', $date->modify('+1 day')->format('Y-m-d 00:00:00'));
}

if ($results) {
return $results[0];
}
if (isset($params['mergeComplementaryOrderShops'])) {
$query->andWhere('e.mainOrderShop IS NULL');
$query->leftJoin('e.complementaryOrderShops', 'complementaryOrderShops');
}

return null;
if (isset($params['excludeComplementaryOrderShops'])) {
$query->andWhere('e.mainOrderShop IS NULL');
}

public function findAllBy($params = [])
{
$setParameterHorsTournee = false;
$setParameterGiftVoucher = false;

if(isset($params['merchant'])){
$query = $this->findByMerchantQuery($params['merchant']);
}else{
$query = $this->findByMerchantQuery();
}
if (isset($params['isCircuit'])) {
$query->leftJoin('e.deliveryPointSale', 'pointSale');
$query->andWhere(
'e.deliveryPointSale IS NULL OR (pointSale.isDepository = 0 AND (pointSale.devAlias IS NULL OR (pointSale.devAlias != :devAliasHorsTournee AND pointSale.devAlias != :devAliasGiftVoucher)))'
);
$setParameterHorsTournee = true;
$setParameterGiftVoucher = true;
}

if (isset($params['count']) && $params['count']) {
$query->select('count(e.id)');
}
if (isset($params['isDepository'])) {
$query->innerJoin('e.deliveryPointSale', 'pointSale');
$query->andWhere(
'pointSale IS NOT NULL AND pointSale.isDepository = 1 AND (pointSale.devAlias IS NULL OR (pointSale.devAlias != :devAliasHorsTournee AND pointSale.devAlias != :devAliasGiftVoucher))'
);
$setParameterHorsTournee = true;
$setParameterGiftVoucher = true;
}

if (isset($params['select'])) {
$query->select( $params['select']);
}
if (isset($params['isOffCircuit'])) {
$query->innerJoin('e.deliveryPointSale', 'pointSale');
$query->andWhere('pointSale IS NOT NULL AND pointSale.devAlias = :devAliasHorsTournee');
$setParameterHorsTournee = true;
}

if (isset($params['section'])) {
$query = $query->andWhere('e.section = :section')->setParameter('section', $params['section']);
}
if (isset($params['isGiftVoucher'])) {
$query->innerJoin('e.deliveryPointSale', 'pointSale');
$query->andWhere('pointSale IS NOT NULL AND pointSale.devAlias = :devAliasGiftVoucher');
$setParameterGiftVoucher = true;
}

if (isset($params['dateStart']) || isset($params['dateEnd'])) {
$params['dateField'] = isset($params['dateField']) ? $params['dateField'] : 'validationDate';
}
if ($setParameterHorsTournee) {
$query->setParameter('devAliasHorsTournee', PointSale::DEV_ALIAS_OFF_CIRCUIT);
}

if (isset($params['dateStart'])) {
$query->andWhere('e.' . $params['dateField'] . ' >= :dateStart')->setParameter('dateStart', $params['dateStart']);
}
if (isset($params['dateEnd'])) {
$query->andWhere('e.' . $params['dateField'] . ' <= :dateEnd')->setParameter('dateEnd', $params['dateEnd']);
}
if ($setParameterGiftVoucher) {
$query->setParameter('devAliasGiftVoucher', PointSale::DEV_ALIAS_GIFT_VOUCHER);
}

if (isset($params['weekNumber'])) {
$query->andWhere('e.weekNumber = :weekNumber')->setParameter('weekNumber', $params['weekNumber']);
}
if (isset($params['deliveryAvailability'])) {
$deliveryAvailability = $params['deliveryAvailability'];

if (isset($params['isCart'])) {
$query = $this->filterOrderCart($query);
}
$deliveryAvailabilityZone = ($deliveryAvailability instanceof DeliveryAvailabilityZone) ? $deliveryAvailability : false;
$deliveryAvailabilityPointSale = ($deliveryAvailability instanceof DeliveryAvailabilityPointSale) ? $deliveryAvailability : false;

if (isset($params['isValid'])) {
$query = $this->filterOrderValid($query);
}
if ($deliveryAvailabilityZone) {
$query->andWhere('e.deliveryAvailabilityZone = :deliveryAvailabilityZone');
$query->setParameter('deliveryAvailabilityZone', $deliveryAvailabilityZone);
}

if (isset($params['isWaitingDelivery'])) {
$query = $this->filterOrderWaitingDelivery($query);
}
if ($deliveryAvailabilityPointSale) {
$query->andWhere('e.deliveryAvailabilityPointSale = :deliveryAvailabilityPointSale');
$query->setParameter('deliveryAvailabilityPointSale', $deliveryAvailabilityPointSale);
}
} else {
$query->leftJoin('e.deliveryAvailabilityZone', 'deliveryAvailabilityZone');
$query->leftJoin('deliveryAvailabilityZone.deliverySlot', 'deliverySlotZone');

if (isset($params['orderStatus'])) {
$query->leftJoin('e.orderStatus', 'os');
$query->andWhere('os.alias LIKE :alias');
$query->setParameter('alias', $params['orderStatus']);
}

if (isset($params['user'])) {
$query->andWhere('e.user = :user')->setParameter('user', $params['user']);
}

if(isset($params['address'])) {
$query->andWhere('e.deliveryAddress = :address OR e.invoiceAddress = :address')->setParameter('address', $params['address']);
}

if(isset($params['weekDeliveryTrucks'])) {
$query->andWhere('e.weekDeliveryTruck IN (:weekDeliveryTrucks)')->setParameter('weekDeliveryTrucks', $params['weekDeliveryTrucks']);
}

if(isset($params['estimatedDeliveryDateTime'])) {
$query->andWhere('e.estimatedDeliveryDateTime >= :deliveryDateStart');
$query->andWhere('e.estimatedDeliveryDateTime < :deliveryDateEnd');
$date = clone $params['estimatedDeliveryDateTime'];
$query->setParameter('deliveryDateStart', $date->format('Y-m-d 00:00:00'));
$query->setParameter('deliveryDateEnd', $date->modify('+1 day')->format('Y-m-d 00:00:00'));
}

if(isset($params['deliveryDate'])) {
$query->andWhere('e.deliveryDate >= :deliveryDateStart');
$query->andWhere('e.deliveryDate < :deliveryDateEnd');
$date = clone $params['deliveryDate'];
$query->setParameter('deliveryDateStart', $date->format('Y-m-d 00:00:00'));
$query->setParameter('deliveryDateEnd', $date->modify('+1 day')->format('Y-m-d 00:00:00'));
}

if (isset($params['mergeComplementaryOrderShops'])) {
$query->andWhere('e.mainOrderShop IS NULL');
$query->leftJoin('e.complementaryOrderShops', 'complementaryOrderShops');
}

if (isset($params['excludeComplementaryOrderShops'])) {
$query->andWhere('e.mainOrderShop IS NULL');
}

$setParameterHorsTournee = false ;
$setParameterGiftVoucher = false ;

if(isset($params['isCircuit'])) {
$query->leftJoin('e.deliveryPointSale', 'pointSale');
$query->andWhere('e.deliveryPointSale IS NULL OR (pointSale.isDepository = 0 AND (pointSale.devAlias IS NULL OR (pointSale.devAlias != :devAliasHorsTournee AND pointSale.devAlias != :devAliasGiftVoucher)))');
$setParameterHorsTournee = true ;
$setParameterGiftVoucher = true ;
}

if(isset($params['isDepository'])) {
$query->innerJoin('e.deliveryPointSale', 'pointSale');
$query->andWhere('pointSale IS NOT NULL AND pointSale.isDepository = 1 AND (pointSale.devAlias IS NULL OR (pointSale.devAlias != :devAliasHorsTournee AND pointSale.devAlias != :devAliasGiftVoucher))');
$setParameterHorsTournee = true ;
$setParameterGiftVoucher = true ;
}

if(isset($params['isOffCircuit'])) {
$query->innerJoin('e.deliveryPointSale', 'pointSale');
$query->andWhere('pointSale IS NOT NULL AND pointSale.devAlias = :devAliasHorsTournee');
$setParameterHorsTournee = true ;
}

if(isset($params['isGiftVoucher'])) {
$query->innerJoin('e.deliveryPointSale', 'pointSale');
$query->andWhere('pointSale IS NOT NULL AND pointSale.devAlias = :devAliasGiftVoucher');
$setParameterGiftVoucher = true ;
}

if($setParameterHorsTournee) {
$query->setParameter('devAliasHorsTournee', PointSale::DEV_ALIAS_OFF_CIRCUIT) ;
}

if($setParameterGiftVoucher) {
$query->setParameter('devAliasGiftVoucher', PointSale::DEV_ALIAS_GIFT_VOUCHER) ;
}

if (isset($params['deliveryAvailability'])) {
$deliveryAvailability = $params['deliveryAvailability'] ;

$deliveryAvailabilityZone = ($deliveryAvailability instanceof DeliveryAvailabilityZone) ? $deliveryAvailability : false;
$deliveryAvailabilityPointSale = ($deliveryAvailability instanceof DeliveryAvailabilityPointSale) ? $deliveryAvailability : false;

if($deliveryAvailabilityZone){
$query->andWhere('e.deliveryAvailabilityZone = :deliveryAvailabilityZone');
$query->setParameter('deliveryAvailabilityZone', $deliveryAvailabilityZone);
}

if($deliveryAvailabilityPointSale) {
$query->andWhere('e.deliveryAvailabilityPointSale = :deliveryAvailabilityPointSale');
$query->setParameter('deliveryAvailabilityPointSale', $deliveryAvailabilityPointSale);
}
}
else{
$query->leftJoin('e.deliveryAvailabilityZone', 'deliveryAvailabilityZone');
$query->leftJoin('deliveryAvailabilityZone.deliverySlot', 'deliverySlotZone');

$query->leftJoin('e.deliveryAvailabilityPointSale', 'deliveryAvailabilityPointSale');
$query->leftJoin('deliveryAvailabilityPointSale.deliverySlot', 'deliverySlotPointSale');
}

if (isset($params['orderBy'])) {
$query->orderBy('e.' . $params['orderBy'], isset($params['orderByDirection']) ? $params['orderByDirection'] : 'DESC');
} else {
$query->orderBy('e.id', 'DESC');
}

if (isset($params['groupBy'])) {
$query->groupBy( $params['groupBy']);
}

if (isset($params['count']) && $params['count']) {
return $query->getQuery()->getSingleScalarResult();
} else {
return $query->getQuery()->getResult();
}
}

public function findLastOrderValidOfWeek($weekNumber)
{
$query = $this->findByMerchantQuery();
$query = $this->filterOrderValid($query);
$query->andWhere('e.weekNumber = :weekNumber');
$query->andWhere('e.mainOrderShop = false OR e.mainOrderShop IS NULL');
$query->setParameter('weekNumber', $weekNumber);
$query->orderBy('e.weekId', 'DESC');
$query->setMaxResults(1);

return $query->getQuery()->getOneOrNullResult();

}

public function findLastOrderValid()
{
$query = $this->findByMerchantQuery();
$query = $this->filterOrderValid($query);
$query->andWhere('e.mainOrderShop = false OR e.mainOrderShop IS NULL');
$query->orderBy('e.idValidOrder', 'DESC');
$query->setMaxResults(1);

return $query->getQuery()->getOneOrNullResult();
$query->leftJoin('e.deliveryAvailabilityPointSale', 'deliveryAvailabilityPointSale');
$query->leftJoin('deliveryAvailabilityPointSale.deliverySlot', 'deliverySlotPointSale');
}

if (isset($params['orderBy'])) {
$query->orderBy(
'e.'.$params['orderBy'],
isset($params['orderByDirection']) ? $params['orderByDirection'] : 'DESC'
);
} else {
$query->orderBy('e.id', 'DESC');
}

if (isset($params['groupBy'])) {
$query->groupBy($params['groupBy']);
}

if (isset($params['count']) && $params['count']) {
return $query->getQuery()->getSingleScalarResult();
} else {
return $query->getQuery()->getResult();
}
}

public function findLastOrderValidOfWeek($weekNumber)
{
$query = $this->findByMerchantQuery();
$query = $this->filterOrderValid($query);
$query->andWhere('e.weekNumber = :weekNumber');
$currentYear = new \DateTime();
$currentYear->setDate($currentYear->format('Y'), 1, 1);
$query->andWhere('e.validationDate >= :now')->setParameter('now', $currentYear);
$query->andWhere('e.mainOrderShop = false OR e.mainOrderShop IS NULL');
$query->setParameter('weekNumber', $weekNumber);
$query->orderBy('e.weekId', 'DESC');
$query->setMaxResults(1);

return $query->getQuery()->getOneOrNullResult();
}

public function findLastOrderValid()
{
$query = $this->findByMerchantQuery();
$query = $this->filterOrderValid($query);
$query->andWhere('e.mainOrderShop = false OR e.mainOrderShop IS NULL');
$query->orderBy('e.idValidOrder', 'DESC');
$query->setMaxResults(1);

return $query->getQuery()->getOneOrNullResult();
}


}

+ 3
- 0
ShopBundle/Repository/ReductionCatalogRepository.php Visa fil

@@ -60,6 +60,9 @@ class ReductionCatalogRepository extends BaseRepository implements DefaultReposi
$query->andWhere(':groupUser MEMBER OF e.groupUsers OR e.groupUsers is empty');
$query->setParameter('user', $user);
$query->setParameter('groupUser', $user->getGroupUsers());
}else{
$query->andWhere('e.users is empty');
$query->andWhere('e.groupUsers is empty');
}

$query->andWhere(':productFamily MEMBER OF e.productFamilies OR e.productFamilies is empty');

+ 2
- 0
ShopBundle/Resources/public/css/backend/ekko-lightbox/ekko-ligthbox.min.css
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 2
- 0
ShopBundle/Resources/public/js/backend/plugin/ekko-lightbox/ekko-lightbox.min.js
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 5
- 0
ShopBundle/Resources/public/js/backend/script/default/init-common.js Visa fil

@@ -156,6 +156,11 @@ function initAdminLtePlugin() {
});


$(document).on('click', '[data-toggle="lightbox"]', function(event) {
event.preventDefault();
$(this).ekkoLightbox();
});

}

function moment() {

+ 1
- 1
ShopBundle/Resources/public/js/backend/script/default/init-list.js Visa fil

@@ -1,4 +1,4 @@
jQuery(document).ready(function () {
jQuery(document).ready(function () {
initDeleteAction();

initResetFilters();

+ 1
- 1
ShopBundle/Resources/public/js/backend/script/order/vuejs-order.js Visa fil

@@ -49,7 +49,7 @@ Vue.component('order-product', {
},
modalAddReductionCredit:function () {
$(this.$parent.$refs['addReductionCreditFormTitle']).val(this.orderProduct.title);
$(this.$parent.$refs['addReductionCreditFormValue']).val(this.orderProduct.price);
$(this.$parent.$refs['addReductionCreditFormValue']).val(this.orderProduct.priceWithTaxAndReduction);
$(this.$parent.$refs['addReductionCreditFormBehaviorTaxRate']).val('tax-included').trigger('change');
$('#modal-add-reduction-credit').modal('show');
}

+ 3
- 1
ShopBundle/Resources/translations/lcshop.fr.yaml Visa fil

@@ -154,7 +154,7 @@ error:
reductionCart:
conditionsError: Cette réduction ne peut pas être appliqué sur cette commande
date: La réduction n'est plus active
pointSale: L'ambassade ne correspond pas
pointSale: Cette réduction étant liée à une ambassade, le code sera à rentrer à l'étape « Paiement » (après avoir choisi la livraison dans l’ambassade correspondante).
deliveryZone: La zone de livraison ne correspond pas
deliverySlot: La créneau de livraison ne correspond pas
groupUser: Le(s) groupe(s) utilisateurs ne correspondent pas
@@ -292,6 +292,7 @@ field:
cash: Espèce
transfer: Virement
credit: Compte prépayé
transfer-gift: Transfert de bon cadeau
minimumAmountCb: "Paiement par carte bancaire : montant minimum"
emailFrom: "Email (From) : email"
emailFromName: "Email (From) : nom"
@@ -384,6 +385,7 @@ field:
ab: Agriculture biologique
hve: Haute valeur environnementale
nature-progres: Nature & progrès
tvvr: "Terra Vitis : Viticulture Responsable"
behaviorExpirationDate: Gèrer
behaviorExpirationDateOptions:
by-product-family: Par produit

+ 5
- 4
ShopBundle/Resources/views/backend/default/sortable.html.twig Visa fil

@@ -73,14 +73,14 @@
</tr>
{% endfor %}

{# {% if _number_of_hidden_results > 0 %}
{# {% if _number_of_hidden_results > 0 %}
<tr class="datagrid-row-empty">
<td class="text-center" colspan="{{ _fields_visible_by_user|length + 1 }}">
<span class="datagrid-row-empty-message"><i
class="fa fa-lock mr-1"></i> {{ 'security.list.hidden_results'|trans({}, 'EasyAdminBundle') }}</span>
</td>
</tr>
{% endif %}#}
{% endif %} #}
{% endblock table_body %}
</tbody>
</table>
@@ -101,7 +101,9 @@
{% set _action = easyadmin_get_action_for_edit_view('list', _entity_config.name) %}

<div class="button-action">
<a class=" {{ _action.css_class|default('') }}" href="{{ path('easyadmin', _request_parameters|merge({ action: _action.name })) }}" target="{{ _action.target }}">
<a class=" {{ _action.css_class|default('') }}"
href="{{ path('easyadmin', _request_parameters|merge({ action: _action.name })) }}"
target="{{ _action.target }}">
{{ _action.label is defined and not _action.label is empty ? _action.label|trans(_trans_parameters) }}
</a>

@@ -112,7 +114,6 @@
</div>
</div>
{{ form_end(postion_form) }}

{% endblock main %}

{% block head_stylesheets %}

+ 9
- 10
ShopBundle/Resources/views/backend/productfamily/macros.html.twig Visa fil

@@ -1,7 +1,7 @@
{% trans_default_domain 'lcshop' %}

{% macro product_sales_statistic(productsSalesStatistic, productFamily=false) %}
{% for weekNumber, weekNumberQuantity in productsSalesStatistic %}
{% for weekNumber, weekNumberQuantity in productsSalesStatistic|reverse(true) %}
<span class="text-success"><i class="fa fa-calendar"></i> {{ weekNumber }}</span>
<span class="text-info"><i class="fa fa-shopping-basket"></i>
<strong>
@@ -19,21 +19,20 @@
class="lc-show-products-sales-statistic btn btn-sm"
data-toggle="tooltip" title="{{ 'action.product.statSales'|trans }}"
data-url="{{ path('easyadmin', { action: 'showSalesStatistic', entity: 'ProductFamily', id: productFamily.id }) }}">
{% for weekNumber, weekNumberQuantity in productsSalesStatistic['data']['total_sales']['data'] %}
{% for weekNumber, weekNumberQuantity in productsSalesStatistic['data']['total_sales']['data']|reverse(true) %}
<span class="text-success"><i class="fa fa-calendar"></i> {{ weekNumber }}</span>
<span class="text-info"><i class="fa fa-shopping-basket"></i>
<strong>
{{ weekNumberQuantity is null ? 0 : weekNumberQuantity }}
{% if productFamily and (productFamily.behaviorDisplaySale== constant('Lc\\ShopBundle\\Model\\ProductFamily::BEHAVIOR_DISPLAY_SALE_BY_MEASURE')) %}
{{ productFamily.unit.unitReference }}
{% endif %}
</strong>
</span>
<strong>
{{ weekNumberQuantity is null ? 0 : weekNumberQuantity }}
{% if productFamily and (productFamily.behaviorDisplaySale== constant('Lc\\ShopBundle\\Model\\ProductFamily::BEHAVIOR_DISPLAY_SALE_BY_MEASURE')) %}
{{ productFamily.unit.unitReference }}
{% endif %}
</strong>
</span>
<br/>
{% endfor %}
</button>
{% endif %}

{% endmacro product_family_sales_statistic %}



+ 17
- 1
ShopBundle/Resources/views/backend/ticket/show.html.twig Visa fil

@@ -60,7 +60,13 @@
</div>
{% endif %}
<div class="direct-chat-text">
{{ message.message|nl2br }}
<p>{{ message.message|nl2br }}</p>
{% if message.imageFilename is not null %}
<i>Photo jointe au message : </i> <br />
<a href="{{ lc_liip(message.imageFilename, 'big') }}" data-toggle="lightbox">
<img src="{{ lc_liip(message.imageFilename, 'thumb') }}" alt="Illustration ticket" />
</a>
{% endif %}
</div>
</div>
{% endfor %}
@@ -85,6 +91,16 @@

{% endblock %}

{% block head_stylesheets %}
{{ parent() }}
<link rel="stylesheet"
href="{{ asset('bundles/lcshop/css/backend/ekko-lightbox/ekko-ligthbox.min.css') }}">
{% endblock head_stylesheets %}

{% block plugin_javascript %}
{{ parent() }}
<script src="{{ asset('bundles/lcshop/js/backend/plugin/ekko-lightbox/ekko-lightbox.min.js')|lc_cache }}"></script>
{% endblock plugin_javascript %}
{% block script_javascript %}
{{ parent() }}
<script src="{{ asset('bundles/lcshop/js/backend/script/ticket/init-edit.js')|lc_cache }}"></script>

+ 1
- 1
ShopBundle/Resources/views/backend/user/macros.html.twig Visa fil

@@ -95,7 +95,7 @@

{% macro box_prepaid_account(user) %}
{% embed '@LcShop/backend/default/block/embed_figure_box.twig' %}
{% set userMerchant = creditUtils.getUserMerchant() %}
{% set userMerchant = creditUtils.getUserMerchant(user) %}
{% trans_default_domain 'lcshop' %}
{% block class %}bg-blue{% endblock %}
{% block icon %}cash-register{% endblock %}

+ 1
- 11
ShopBundle/Services/MailjetSmsUtils.php Visa fil

@@ -86,17 +86,7 @@ class MailjetSmsUtils
]
);

$statusCode = $response->getStatusCode();

if ($statusCode == 200) {
$content = $response->getContent();
$content = $response->toArray();
return $content;
} else {
// log
//return $response->getContent() ;
return false;
}
return $response ;
}
else {
throw new \ErrorException('Le token SMS Mailjet n\'est pas défini.');

+ 1
- 1
ShopBundle/Services/Price/OrderProductPriceUtils.php Visa fil

@@ -89,7 +89,7 @@ class OrderProductPriceUtils

public function getMarginPercent(OrderProductInterface $orderProduct)
{
if ($this->getBuyingPrice($orderProduct)) {
if ($this->getBuyingPrice($orderProduct) && $this->getPriceWithReduction($orderProduct)) {
return $this->round(($this->getMargin($orderProduct) / $this->getPriceWithReduction($orderProduct)) * 100);
} else {
return 0;

+ 103
- 0
ShopBundle/Services/SmsFactorUtils.php Visa fil

@@ -0,0 +1,103 @@
<?php

namespace Lc\ShopBundle\Services;

use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Twig\Environment;

class SmsFactorUtils
{
const TO_USER = 'to-user' ;
const CONTENT_MESSAGE = 'content-message' ;
const CONTENT_TEMPLATE = 'content-template' ;
const CONTENT_DATA = 'content-data' ;

protected $client;
protected $parameterBag;
protected $mailUtils ;
protected $utils ;
protected $templating ;

public function __construct(
HttpClientInterface $client,
ParameterBagInterface $parameterBag,
MailUtils $mailUtils,
Utils $utils,
Environment $templating
) {
$this->client = $client;
$this->parameterBag = $parameterBag;
$this->mailUtils = $mailUtils ;
$this->utils = $utils ;
$this->templating = $templating ;
}

public function send($params = [])
{
$user = isset($params[self::TO_USER]) ? $params[self::TO_USER] : null ;

if($user) {
$phone = $this->utils->formatPhoneNumber($user->getPhone()) ;

$message = '' ;
if(isset($params[self::CONTENT_MESSAGE])) {
$message = $params[self::CONTENT_MESSAGE] ;
}
elseif(isset($params[self::CONTENT_TEMPLATE])) {
$template = $params[self::CONTENT_TEMPLATE] ;
$paramsTemplate = [] ;
if(isset($params[self::CONTENT_DATA]) && is_array($params[self::CONTENT_DATA])) {
$paramsTemplate = $params[self::CONTENT_DATA] ;
}
$message = $this->templating->render($template, $paramsTemplate) ;
}

if($this->parameterBag->get('mailjet.dev.redirect.active') == 1) {
$this->mailUtils->send([
MailUtils::SUBJECT => 'Notification par SMS à '.$phone,
MailUtils::TO_EMAIL => $user->getEmail(),
MailUtils::CONTENT_TEMPLATE => 'mail/notification',
MailUtils::CONTENT_DATA => [
'message' => $message
],
]);

return true ;
}
else {
$token = $this->parameterBag->get('smsfactor.token');
$from = $this->parameterBag->get('smsfactor.from');

if ($token && strlen($token) > 0) {

$response = $this->client->request(
'GET',
'https://api.smsfactor.com/send',
[
'headers' => [
'Authorization' => 'Bearer ' . $token,
'Content-Type' => 'application/json; charset=utf-8',
'Accept' => 'application/json'
],
'query' => [
'sender' => $from,
'to' => $phone,
'text' => $message,
],
]
);

return $response ;
}
else {
throw new \ErrorException('Le token SMS SmsFactor n\'est pas défini.');
}
}
}

return false;
}

}

+ 180
- 170
ShopBundle/Services/TicketUtils.php Visa fil

@@ -1,6 +1,6 @@
<?php

namespace Lc\ShopBundle\Services ;
namespace Lc\ShopBundle\Services;

use App\Entity\TicketMessage;
use Doctrine\ORM\EntityManagerInterface;
@@ -16,194 +16,204 @@ use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;

class TicketUtils
{
protected $em ;
protected $merchantUtils ;
protected $mailUtils ;
protected $authorizationChecker ;
protected $parameterBag ;

public function __construct(
EntityManagerInterface $em,
MerchantUtilsInterface $merchantUtils,
MailUtils $mailUtils,
AuthorizationCheckerInterface $authorizationChecker,
ParameterBagInterface $parameterBag
) {
$this->em = $em ;
$this->merchantUtils = $merchantUtils ;
$this->mailUtils = $mailUtils ;
$this->authorizationChecker = $authorizationChecker ;
$this->parameterBag = $parameterBag ;
protected $em;
protected $merchantUtils;
protected $mailUtils;
protected $authorizationChecker;
protected $parameterBag;

public function __construct(
EntityManagerInterface $em,
MerchantUtilsInterface $merchantUtils,
MailUtils $mailUtils,
AuthorizationCheckerInterface $authorizationChecker,
ParameterBagInterface $parameterBag
) {
$this->em = $em;
$this->merchantUtils = $merchantUtils;
$this->mailUtils = $mailUtils;
$this->authorizationChecker = $authorizationChecker;
$this->parameterBag = $parameterBag;
}

public function getTicketsByUser($user)
{
$ticketRepo = $this->em->getRepository(TicketInterface::class);

return $ticketRepo->findBy(array('user' => $user));
}

public function uploadImageTicketMessage($formTicket)
{
$image = $formTicket->get('image')->getData();

if ($image) {
$originalFilename = pathinfo($image->getClientOriginalName(), PATHINFO_FILENAME);
$newFilename = uniqid().'.'.$image->guessExtension();

try {
$image->move(
$this->parameterBag->get('app.ticket_images_directory'),
$newFilename
);
} catch (FileException $e) {
throw new \ErrorException("Une erreur est survenue lors de l'upload du fichier.");
}

return $this->parameterBag->get('app.ticket_images_subdirectory').$newFilename;
}

public function getTicketsByUser($user){
$ticketRepo = $this->em->getRepository(TicketInterface::class);
return $ticketRepo->findBy(array('user'=>$user));

return false;
}

public function createTicket($params): TicketInterface
{
$classTicket = $this->em->getClassMetadata(TicketInterface::class)->getName();
$ticket = new $classTicket;
$ticket->setMerchant($this->merchantUtils->getMerchantCurrent());
$ticket->setStatus(1);

if (isset($params['user'])) {
$ticket->setUser($params['user']);

$email = $params['user']->getEmail();
$firstname = $params['user']->getFirstname();
} else {
$ticket->setVisitorFirstname($params['visitorFirstname']);
$ticket->setVisitorLastname($params['visitorLastname']);
$ticket->setVisitorEmail($params['visitorEmail']);
$ticket->setVisitorToken(uniqid());

$email = $params['visitorEmail'];
$firstname = $params['visitorFirstname'];
}

public function uploadImageTicketMessage($formTicket)
{
$image = $formTicket->get('image')->getData();

if ($image) {
$originalFilename = pathinfo($image->getClientOriginalName(), PATHINFO_FILENAME);
$newFilename = uniqid().'.' . $image->guessExtension();

try {
$image->move(
$this->parameterBag->get('app.ticket_images_directory'),
$newFilename
);
}
catch (FileException $e) {
throw new \ErrorException("Une erreur est survenue lors de l'upload du fichier.");
}

return $this->parameterBag->get('app.ticket_images_subdirectory').$newFilename ;
}

return false ;
$ticket->setStatus(Ticket::TICKET_STATUS_OPEN);
$ticket->setType($params['type']);
if (isset($params['orderShop']) && $params['orderShop'] && $params['orderShop'] instanceof OrderShopInterface) {
$ticket->setOrderShop($params['orderShop']);
}
$ticket->setSubject($params['subject']);
$this->em->persist($ticket);

public function createTicket($params): TicketInterface
{
$classTicket = $this->em->getClassMetadata(TicketInterface::class)->getName() ;
$ticket = new $classTicket ;
$ticket->setMerchant($this->merchantUtils->getMerchantCurrent()) ;
$ticket->setStatus(1) ;

if(isset($params['user'])) {
$ticket->setUser($params['user']) ;

$email = $params['user']->getEmail() ;
$firstname = $params['user']->getFirstname() ;
}
else {
$ticket->setVisitorFirstname($params['visitorFirstname']) ;
$ticket->setVisitorLastname($params['visitorLastname']) ;
$ticket->setVisitorEmail($params['visitorEmail']) ;
$ticket->setVisitorToken(uniqid()) ;

$email = $params['visitorEmail'] ;
$firstname = $params['visitorFirstname'] ;
}

$ticket->setStatus(Ticket::TICKET_STATUS_OPEN) ;
$ticket->setType($params['type']) ;
if(isset($params['orderShop']) && $params['orderShop'] && $params['orderShop'] instanceof OrderShopInterface) {
$ticket->setOrderShop($params['orderShop']) ;
}
$ticket->setSubject($params['subject']) ;
$this->em->persist($ticket);

$classTicketMessage = $this->em->getClassMetadata(TicketMessageInterface::class)->getName() ;
$ticketMessage = new $classTicketMessage ;
$ticketMessage->setStatus(1) ;
$ticketMessage->setTicket($ticket) ;
$ticketMessage->setMessage($params['message']) ;

if(isset($params['imageFilename']) && $params['imageFilename']) {
$ticketMessage->setImageFilename($params['imageFilename']);
}

if(isset($params['createByAdmin']) && $params['createByAdmin']) {
$ticketMessage->setAnswerByAdmin(true);
}
$this->em->persist($ticketMessage);

$this->em->flush() ;

if(isset($params['createByAdmin']) && $params['createByAdmin']) {
// envoi email au client
$this->mailUtils->send([
MailUtils::SUBJECT => 'Vous avez reçu un nouveau message',
MailUtils::TO_EMAIL => $email,
MailUtils::CONTENT_TEMPLATE => 'mail/ticket-new-by-admin',
MailUtils::CONTENT_DATA => [
'firstname' => $firstname,
'ticket' => $ticket
],
]);
}else{
$this->mailUtils->send([
MailUtils::SUBJECT => 'Nouvelle demande',
MailUtils::TO_EMAIL => $email,
MailUtils::CONTENT_TEMPLATE => 'mail/ticket-new',
MailUtils::CONTENT_DATA => [
'firstname' => $firstname,
'ticket' => $ticket
],
]);
}

$classTicketMessage = $this->em->getClassMetadata(TicketMessageInterface::class)->getName();
$ticketMessage = new $classTicketMessage;
$ticketMessage->setStatus(1);
$ticketMessage->setTicket($ticket);
$ticketMessage->setMessage($params['message']);

$this->notifyAdmin($ticket, $ticketMessage);

return $ticket ;
if (isset($params['imageFilename']) && $params['imageFilename']) {
$ticketMessage->setImageFilename($params['imageFilename']);
}

public function createTicketMessage($params)
{
$classTicketMessage = $this->em->getClassMetadata(TicketMessageInterface::class)->getName() ;
$ticketMessage = new $classTicketMessage ;

$ticket = $params['ticket'] ;

$ticketMessage->setStatus(1) ;
$ticketMessage->setTicket($ticket) ;
$ticketMessage->setMessage($params['message']) ;
if(isset($params['answerByAdmin']) && $params['answerByAdmin']) {
$ticketMessage->setAnswerByAdmin($params['answerByAdmin']) ;

// envoi email au client
$this->mailUtils->send([
MailUtils::SUBJECT => 'Réponse à votre demande',
MailUtils::TO_EMAIL => $ticket->getUser() ? $ticket->getUser()->getEmail() : $ticket->getVisitorEmail(),
MailUtils::CONTENT_TEMPLATE => 'mail/ticket-response',
MailUtils::CONTENT_DATA => [
'firstname' => $ticket->getUser() ? $ticket->getUser()->getFirstname() : $ticket->getVisitorFirstname(),
'ticket' => $ticket
],
]) ;
}
$this->em->persist($ticketMessage);

if(isset($params['closeTicket']) && $params['closeTicket']) {
$ticket->setStatus(Ticket::TICKET_STATUS_CLOSED) ;
}
if (isset($params['createByAdmin']) && $params['createByAdmin']) {
$ticketMessage->setAnswerByAdmin(true);
}
$this->em->persist($ticketMessage);

$this->em->flush();

if (isset($params['createByAdmin']) && $params['createByAdmin']) {
// envoi email au client
$this->mailUtils->send(
[
MailUtils::SUBJECT => 'Vous avez reçu un nouveau message',
MailUtils::TO_EMAIL => $email,
MailUtils::CONTENT_TEMPLATE => 'mail/ticket-new-by-admin',
MailUtils::CONTENT_DATA => [
'firstname' => $firstname,
'ticket' => $ticket,
],
]
);
} else {
$this->mailUtils->send(
[
MailUtils::SUBJECT => 'Nouvelle demande',
MailUtils::TO_EMAIL => $email,
MailUtils::CONTENT_TEMPLATE => 'mail/ticket-new',
MailUtils::CONTENT_DATA => [
'firstname' => $firstname,
'ticket' => $ticket,
],
]
);
}

$ticket->setUpdatedAt(new \DateTime()) ;
$this->em->persist($ticket);

$this->em->flush() ;
$this->notifyAdmin($ticket, $ticketMessage);

return $ticket;
}

public function createTicketMessage($params)
{
$classTicketMessage = $this->em->getClassMetadata(TicketMessageInterface::class)->getName();
$ticketMessage = new $classTicketMessage;

$ticket = $params['ticket'];

$ticketMessage->setStatus(1);
$ticketMessage->setTicket($ticket);
$ticketMessage->setMessage($params['message']);
if (isset($params['answerByAdmin']) && $params['answerByAdmin']) {
$ticketMessage->setAnswerByAdmin($params['answerByAdmin']);

// envoi email au client
$this->mailUtils->send(
[
MailUtils::SUBJECT => 'Réponse à votre demande',
MailUtils::TO_EMAIL => $ticket->getUser() ? $ticket->getUser()->getEmail(
) : $ticket->getVisitorEmail(),
MailUtils::CONTENT_TEMPLATE => 'mail/ticket-response',
MailUtils::CONTENT_DATA => [
'firstname' => $ticket->getUser() ? $ticket->getUser()->getFirstname(
) : $ticket->getVisitorFirstname(),
'ticket' => $ticket,
],
]
);
}
$this->em->persist($ticketMessage);

return $ticketMessage ;
if (isset($params['imageFilename']) && $params['imageFilename']) {
$ticketMessage->setImageFilename($params['imageFilename']);
}
if (isset($params['closeTicket']) && $params['closeTicket']) {
$ticket->setStatus(Ticket::TICKET_STATUS_CLOSED);
}

public function notifyAdmin($ticket, $ticketMessage){
$userRepo = $this->em->getRepository(UserInterface::class);
$usersToNotify = $userRepo->findByTicketTypesNotification($ticket->getType());
$ticket->setUpdatedAt(new \DateTime());
$this->em->persist($ticket);

$this->em->flush();

foreach ($usersToNotify as $userToNotify){
return $ticketMessage;
}

if($this->authorizationChecker->isGranted('ROLE_ADMIN', $userToNotify)){
public function notifyAdmin($ticket, $ticketMessage)
{
$userRepo = $this->em->getRepository(UserInterface::class);
$usersToNotify = $userRepo->findByTicketTypesNotification($ticket->getType());

// envoi email au client
$this->mailUtils->send([
MailUtils::SUBJECT => 'Nouveau ticket sur placedulocal',
MailUtils::TO_EMAIL => $userToNotify->getEmail(),
MailUtils::CONTENT_TEMPLATE => 'mail/ticket-notification',
MailUtils::CONTENT_DATA => [
'firstname' => $userToNotify->getFirstname(),
'ticket' => $ticket,
'ticketMessage' => $ticketMessage
],
]) ;
}
}

foreach ($usersToNotify as $userToNotify) {
if ($this->authorizationChecker->isGranted('ROLE_ADMIN', $userToNotify)) {
// envoi email au client
$this->mailUtils->send(
[
MailUtils::SUBJECT => 'Nouveau ticket sur placedulocal',
MailUtils::TO_EMAIL => $userToNotify->getEmail(),
MailUtils::CONTENT_TEMPLATE => 'mail/ticket-notification',
MailUtils::CONTENT_DATA => [
'firstname' => $userToNotify->getFirstname(),
'ticket' => $ticket,
'ticketMessage' => $ticketMessage,
],
]
);
}
}
}
}


+ 1
- 0
ShopBundle/Services/Utils.php Visa fil

@@ -47,6 +47,7 @@ class Utils
const MEAN_PAYMENT_CREDIT = 'credit';
const MEAN_PAYMENT_TRANSFER = 'transfer';
const MEAN_PAYMENT_CASH = 'cash';
const MEAN_PAYMENT_GIFT = 'transfer-gift';

public function __construct(EntityManagerInterface $em, ParameterBagInterface $parameterBag, SessionInterface $session, TranslatorInterface $translator, ConfigManager $configManager, CacheManager $liipCacheHelper)
{

+ 9
- 1
ShopBundle/Services/UtilsManager.php Visa fil

@@ -30,6 +30,7 @@ class UtilsManager
protected $pointLocationUtils ;
protected $sectionUtils ;
protected $mailjetSmsUtils ;
protected $smsFactorUtils ;

public function __construct(
Utils $utils,
@@ -46,7 +47,8 @@ class UtilsManager
PointLocationUtils $pointLocationUtils,
UtilsProcess $utilsProcess,
SectionUtilsInterface $sectionUtils,
MailjetSmsUtils $mailjetSmsUtils
MailjetSmsUtils $mailjetSmsUtils,
SmsFactorUtils $smsFactorUtils
)
{
$this->utils = $utils ;
@@ -64,6 +66,7 @@ class UtilsManager
$this->utilsProcess = $utilsProcess ;
$this->sectionUtils = $sectionUtils ;
$this->mailjetSmsUtils = $mailjetSmsUtils ;
$this->smsFactorUtils = $smsFactorUtils ;
}

public function getUtils(): Utils
@@ -141,4 +144,9 @@ class UtilsManager
return $this->mailjetSmsUtils ;
}

public function getSmsFactorUtils(): SmsFactorUtils
{
return $this->smsFactorUtils ;
}

}

+ 1
- 0
ShopBundle/Statistic/Statistic.php Visa fil

@@ -154,6 +154,7 @@ class Statistic
public function getInterval()
{
return $this->interval;

}

public function configurePropertyOptions(OptionsResolver $resolver)

Laddar…
Avbryt
Spara