@@ -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(); |
@@ -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, |
@@ -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', |
@@ -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'; |
@@ -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(); | |||
} | |||
} |
@@ -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'); |
@@ -156,6 +156,11 @@ function initAdminLtePlugin() { | |||
}); | |||
$(document).on('click', '[data-toggle="lightbox"]', function(event) { | |||
event.preventDefault(); | |||
$(this).ekkoLightbox(); | |||
}); | |||
} | |||
function moment() { |
@@ -1,4 +1,4 @@ | |||
jQuery(document).ready(function () { | |||
jQuery(document).ready(function () { | |||
initDeleteAction(); | |||
initResetFilters(); |
@@ -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'); | |||
} |
@@ -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 |
@@ -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 %} |
@@ -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 %} | |||
@@ -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> |
@@ -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 %} |
@@ -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.'); |
@@ -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; |
@@ -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; | |||
} | |||
} |
@@ -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, | |||
], | |||
] | |||
); | |||
} | |||
} | |||
} | |||
} | |||
@@ -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) | |||
{ |
@@ -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 ; | |||
} | |||
} |
@@ -154,6 +154,7 @@ class Statistic | |||
public function getInterval() | |||
{ | |||
return $this->interval; | |||
} | |||
public function configurePropertyOptions(OptionsResolver $resolver) |