Backup
This commit is contained in:
parent
1a49dc9097
commit
d74cadada6
@ -6,6 +6,9 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: ../../
|
context: ../../
|
||||||
dockerfile: ./.docker/images/php/base/Dockerfile
|
dockerfile: ./.docker/images/php/base/Dockerfile
|
||||||
|
platforms:
|
||||||
|
- "linux/amd64"
|
||||||
|
- "linux/arm64"
|
||||||
args:
|
args:
|
||||||
- ALPINE_VERSION=${ALPINE_VERSION?}
|
- ALPINE_VERSION=${ALPINE_VERSION?}
|
||||||
- APP_CODE_PATH=${APP_CODE_PATH_CONTAINER?}
|
- APP_CODE_PATH=${APP_CODE_PATH_CONTAINER?}
|
||||||
|
|||||||
@ -5,6 +5,9 @@ services:
|
|||||||
image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/application-${ENV?}:${TAG?}
|
image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/application-${ENV?}:${TAG?}
|
||||||
build:
|
build:
|
||||||
context: ../
|
context: ../
|
||||||
|
platforms:
|
||||||
|
- "linux/amd64"
|
||||||
|
- "linux/arm64"
|
||||||
dockerfile: ./images/php/application/Dockerfile
|
dockerfile: ./images/php/application/Dockerfile
|
||||||
target: ${ENV?}
|
target: ${ENV?}
|
||||||
args:
|
args:
|
||||||
|
|||||||
@ -5,6 +5,9 @@ services:
|
|||||||
image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-fpm-${ENV?}:${TAG?}
|
image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-fpm-${ENV?}:${TAG?}
|
||||||
build:
|
build:
|
||||||
context: ../
|
context: ../
|
||||||
|
platforms:
|
||||||
|
- "linux/amd64"
|
||||||
|
- "linux/arm64"
|
||||||
dockerfile: ./images/php/fpm/Dockerfile
|
dockerfile: ./images/php/fpm/Dockerfile
|
||||||
target: ${ENV?}
|
target: ${ENV?}
|
||||||
args:
|
args:
|
||||||
@ -14,6 +17,9 @@ services:
|
|||||||
image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-cron-${ENV?}:${TAG?}
|
image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-cron-${ENV?}:${TAG?}
|
||||||
build:
|
build:
|
||||||
context: ../
|
context: ../
|
||||||
|
platforms:
|
||||||
|
- "linux/amd64"
|
||||||
|
- "linux/arm64"
|
||||||
dockerfile: ./images/php/cron/Dockerfile
|
dockerfile: ./images/php/cron/Dockerfile
|
||||||
target: ${ENV?}
|
target: ${ENV?}
|
||||||
args:
|
args:
|
||||||
@ -24,8 +30,11 @@ services:
|
|||||||
image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/web-${ENV?}:${TAG?}
|
image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/web-${ENV?}:${TAG?}
|
||||||
build:
|
build:
|
||||||
context: ../../
|
context: ../../
|
||||||
|
platforms:
|
||||||
|
- "linux/amd64"
|
||||||
|
- "linux/arm64"
|
||||||
dockerfile: ./.docker/images/nginx/Dockerfile
|
dockerfile: ./.docker/images/nginx/Dockerfile
|
||||||
target: ${ENV?}
|
target: ${ENV?}
|
||||||
args:
|
args:
|
||||||
- NGINX_VERSION=${NGINX_VERSION?}
|
- NGINX_VERSION=${NGINX_VERSION?}
|
||||||
- APP_CODE_PATH=${APP_CODE_PATH_CONTAINER?}
|
- APP_CODE_PATH=${APP_CODE_PATH_CONTAINER?}
|
||||||
|
|||||||
@ -63,6 +63,9 @@ services:
|
|||||||
image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/application-${ENV?}:${TAG?}
|
image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/application-${ENV?}:${TAG?}
|
||||||
build:
|
build:
|
||||||
context: ../
|
context: ../
|
||||||
|
platforms:
|
||||||
|
- "linux/amd64"
|
||||||
|
- "linux/arm64"
|
||||||
dockerfile: ./images/php/application/Dockerfile
|
dockerfile: ./images/php/application/Dockerfile
|
||||||
args:
|
args:
|
||||||
- BASE_IMAGE=${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-base-${ENV?}:${TAG?}
|
- BASE_IMAGE=${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-base-${ENV?}:${TAG?}
|
||||||
|
|||||||
@ -41,7 +41,7 @@ server {
|
|||||||
add_header X-Content-Type-Options nosniff always;
|
add_header X-Content-Type-Options nosniff always;
|
||||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||||
add_header X-XSS-Protection "1; mode=block" always;
|
add_header X-XSS-Protection "1; mode=block" always;
|
||||||
add_header Content-Security-Policy "default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'" always;
|
add_header Content-Security-Policy "default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'; worker-src blob:; img-src https: blob: data:" always;
|
||||||
fastcgi_temp_path /tmp/fastcgi 1 2;
|
fastcgi_temp_path /tmp/fastcgi 1 2;
|
||||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||||
fastcgi_pass php-fpm:9000;
|
fastcgi_pass php-fpm:9000;
|
||||||
|
|||||||
@ -5,5 +5,5 @@ opcache.revalidate_freq = "0"
|
|||||||
assert.exception = 1
|
assert.exception = 1
|
||||||
zend.assertions = 1
|
zend.assertions = 1
|
||||||
|
|
||||||
display_error=0
|
display_errors=0
|
||||||
error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED
|
error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -72,6 +72,7 @@
|
|||||||
"symfony/framework-bundle": "*",
|
"symfony/framework-bundle": "*",
|
||||||
"symfony/http-client": "*",
|
"symfony/http-client": "*",
|
||||||
"symfony/intl": "*",
|
"symfony/intl": "*",
|
||||||
|
"symfony/lock": "6.4.*",
|
||||||
"symfony/mailer": "*",
|
"symfony/mailer": "*",
|
||||||
"symfony/mime": "*",
|
"symfony/mime": "*",
|
||||||
"symfony/monolog-bundle": "^3.8",
|
"symfony/monolog-bundle": "^3.8",
|
||||||
|
|||||||
1403
src/new/composer.lock
generated
1403
src/new/composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -5,5 +5,10 @@ declare(strict_types=1);
|
|||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||||
$containerConfigurator->extension('doctrine_mongodb', ['auto_generate_proxy_classes' => true, 'auto_generate_hydrator_classes' => true, 'connections' => ['default' => ['server' => '%env(resolve:MONGODB_URL)%', 'options' => []]], 'default_database' => '%env(resolve:MONGODB_DB)%', 'document_managers' => ['default' => ['auto_mapping' => true]]]);
|
$containerConfigurator->extension(
|
||||||
|
'doctrine_mongodb',
|
||||||
|
['auto_generate_proxy_classes' => true,
|
||||||
|
'auto_generate_hydrator_classes' => true,
|
||||||
|
'connections' => ['default' => ['server' => '%env(resolve:MONGODB_URL)%', 'options' => []]], 'default_database' => '%env(resolve:MONGODB_DB)%', 'document_managers' => ['default' => ['auto_mapping' => true]]]
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
2
src/new/config/packages/lock.yaml
Normal file
2
src/new/config/packages/lock.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
framework:
|
||||||
|
lock: '%env(LOCK_DSN)%'
|
||||||
@ -2,17 +2,23 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use PSC\Shop\EntityBundle\Document\Instance;
|
||||||
use PSC\Shop\EntityBundle\Entity\Contact;
|
use PSC\Shop\EntityBundle\Entity\Contact;
|
||||||
use PSC\Shop\EntityBundle\Entity\Shop;
|
use PSC\Shop\EntityBundle\Entity\Shop;
|
||||||
use PSC\Shop\UserBundle\Model\ApiUser;
|
use PSC\Shop\UserBundle\Model\ApiUser;
|
||||||
use PSC\Shop\UserBundle\Security\ApiKeyAuthenticator;
|
use PSC\Shop\UserBundle\Security\ApiKeyAuthenticator;
|
||||||
use PSC\Shop\UserBundle\Security\ApiKeyExtractor;
|
use PSC\Shop\UserBundle\Security\ApiKeyExtractor;
|
||||||
use PSC\Shop\UserBundle\Security\ApiKeyHandler;
|
use PSC\Shop\UserBundle\Security\ApiKeyHandler;
|
||||||
|
use PSC\Shop\UserBundle\Security\ApiKey\ApiKeyProvider;
|
||||||
|
use PSC\Shop\UserBundle\Security\ApiKey\InstanceProvider;
|
||||||
|
use PSC\Shop\UserBundle\Security\ApiKey\ShopProvider;
|
||||||
|
use PSC\Shop\UserBundle\Security\User\UserProvider;
|
||||||
use PSC\Shop\UserBundle\Security\ZendAuthenticator;
|
use PSC\Shop\UserBundle\Security\ZendAuthenticator;
|
||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||||
$containerConfigurator->extension('security',
|
$containerConfigurator->extension(
|
||||||
|
'security',
|
||||||
[
|
[
|
||||||
'password_hashers' =>
|
'password_hashers' =>
|
||||||
[
|
[
|
||||||
@ -61,16 +67,30 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
'ROLE_PRODUCTION',
|
'ROLE_PRODUCTION',
|
||||||
'ROLE_SUPER_SHOP',
|
'ROLE_SUPER_SHOP',
|
||||||
'ROLE_ALLOWED_TO_SWITCH'
|
'ROLE_ALLOWED_TO_SWITCH'
|
||||||
|
],
|
||||||
|
'ROLE_API' => [
|
||||||
|
'ROLE_SHOP'
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
'providers' => [
|
'providers' => [
|
||||||
'database' => ['entity' => ['class' => Contact::class]],
|
//'database' => ['entity' => ['class' => Contact::class]],
|
||||||
'database_token' => ['entity' => ['class' => Shop::class]],
|
'user_provider' => ['id' => UserProvider::class ],
|
||||||
|
'shop_provider' => ['id' => ShopProvider::class ],
|
||||||
|
'instance_provider' => ['id' => InstanceProvider::class ],
|
||||||
|
'all' => [
|
||||||
|
'chain' =>
|
||||||
|
[
|
||||||
|
'providers' =>
|
||||||
|
['user_provider', 'shop_provider', 'instance_provider']
|
||||||
|
]
|
||||||
|
]
|
||||||
|
// 'database_token' => ['entity' => ['class' => Shop::class]],
|
||||||
|
// 'database_api_key' => ['entity' => ['class' => Instance::class]],
|
||||||
],
|
],
|
||||||
'firewalls' => [
|
'firewalls' => [
|
||||||
'admin_secured_area' => [
|
'admin_secured_area' => [
|
||||||
'pattern' => '^/backend',
|
'pattern' => '^/backend',
|
||||||
'provider' => 'database',
|
'provider' => 'user_provider',
|
||||||
'form_login' => [
|
'form_login' => [
|
||||||
'check_path' => 'psc_backend_login',
|
'check_path' => 'psc_backend_login',
|
||||||
'login_path' => 'psc_backend_login',
|
'login_path' => 'psc_backend_login',
|
||||||
@ -87,7 +107,7 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
'api_login' => [
|
'api_login' => [
|
||||||
'pattern' => '/api/login',
|
'pattern' => '/api/login',
|
||||||
'stateless' => false,
|
'stateless' => false,
|
||||||
'provider' => 'database',
|
'provider' => 'all',
|
||||||
'json_login' => [
|
'json_login' => [
|
||||||
'check_path' => '/api/login_check',
|
'check_path' => '/api/login_check',
|
||||||
'success_handler' => 'lexik_jwt_authentication.handler.authentication_success',
|
'success_handler' => 'lexik_jwt_authentication.handler.authentication_success',
|
||||||
@ -97,7 +117,7 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
'api' => [
|
'api' => [
|
||||||
'pattern' => '^/api',
|
'pattern' => '^/api',
|
||||||
'stateless' => false,
|
'stateless' => false,
|
||||||
'provider' => 'database',
|
'provider' => 'all',
|
||||||
'jwt' => null,
|
'jwt' => null,
|
||||||
'access_token' => [
|
'access_token' => [
|
||||||
'token_handler' => ApiKeyHandler::class,
|
'token_handler' => ApiKeyHandler::class,
|
||||||
@ -106,7 +126,7 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
],
|
],
|
||||||
'storefront' => [
|
'storefront' => [
|
||||||
'pattern' => '^/',
|
'pattern' => '^/',
|
||||||
'provider' => 'database',
|
'provider' => 'user_provider',
|
||||||
'stateless' => false,
|
'stateless' => false,
|
||||||
'jwt' => null,
|
'jwt' => null,
|
||||||
'custom_authenticators' => [
|
'custom_authenticators' => [
|
||||||
@ -141,5 +161,6 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
'roles' => 'PUBLIC_ACCESS'
|
'roles' => 'PUBLIC_ACCESS'
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]);
|
]
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -41,6 +41,36 @@ PSC\Shop\EntityBundle\Entity\Contact:
|
|||||||
street: "Chausseestraße3"
|
street: "Chausseestraße3"
|
||||||
house_number: "24b3"
|
house_number: "24b3"
|
||||||
|
|
||||||
|
contact_4:
|
||||||
|
username: company@shop.de
|
||||||
|
email: company@shop.de
|
||||||
|
name: company@shop.de
|
||||||
|
password: test2014
|
||||||
|
enable: true
|
||||||
|
setRolesForm: ['@role_1','@role_5']
|
||||||
|
firstname: "Thomas"
|
||||||
|
company: "PSC"
|
||||||
|
lastname: "Peterson"
|
||||||
|
city: "Gribow"
|
||||||
|
zip: "17506"
|
||||||
|
street: "Chausseestraße"
|
||||||
|
house_number: "24b"
|
||||||
|
|
||||||
|
contact_5:
|
||||||
|
username: association@shop.de
|
||||||
|
email: association@shop.de
|
||||||
|
name: association@shop.de
|
||||||
|
password: test2014
|
||||||
|
enable: true
|
||||||
|
setRolesForm: ['@role_1','@role_5']
|
||||||
|
firstname: "Thomas"
|
||||||
|
company: "ASSOCATION"
|
||||||
|
lastname: "Peterson"
|
||||||
|
city: "Gribow"
|
||||||
|
zip: "17506"
|
||||||
|
street: "Chausseestraße"
|
||||||
|
house_number: "24b"
|
||||||
|
|
||||||
|
|
||||||
PSC\Shop\EntityBundle\Entity\ContactAddress:
|
PSC\Shop\EntityBundle\Entity\ContactAddress:
|
||||||
contactaddress_1:
|
contactaddress_1:
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
PSC\Shop\EntityBundle\Entity\Install:
|
PSC\Shop\EntityBundle\Entity\Install:
|
||||||
install_1:
|
install_1:
|
||||||
uid: 1
|
# uid: 1
|
||||||
color_db: "TEST"
|
color_db: "TEST"
|
||||||
|
|||||||
@ -50,4 +50,41 @@ PSC\Shop\EntityBundle\Entity\Product:
|
|||||||
taxClass: 19
|
taxClass: 19
|
||||||
price: 20
|
price: 20
|
||||||
set_config: '{}'
|
set_config: '{}'
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
|
product_5:
|
||||||
|
uid: 9
|
||||||
|
title: XML Calc Test 9 Example
|
||||||
|
language: 'de'
|
||||||
|
url: xml_test_9
|
||||||
|
uuid: 01938686-0e4d-7da9-bae3-b2e1b1681f9f
|
||||||
|
type: 6
|
||||||
|
pos: <numberBetween(1, 200)>
|
||||||
|
private: false
|
||||||
|
taxClass: 19
|
||||||
|
set_config: '{}'
|
||||||
|
shop: '@shop_1'
|
||||||
|
calcXml: >
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<kalkulation>
|
||||||
|
<artikel>
|
||||||
|
<name>SD-Durchschreibesätze A4-Blocks</name>
|
||||||
|
<kommentar>210 mm x 297 mm</kommentar>
|
||||||
|
|
||||||
|
<option id="auflage" name="Auflage" type="Input" default="10"/>
|
||||||
|
|
||||||
|
<option id="calc_rabatt" type="Hidden">
|
||||||
|
<contact.accountType>
|
||||||
|
<grenze calc_value="1">0-1</grenze>
|
||||||
|
<grenze calc_value="0.8">2</grenze>
|
||||||
|
<grenze calc_value="0.5">3</grenze>
|
||||||
|
</contact.accountType>
|
||||||
|
</option>
|
||||||
|
|
||||||
|
<option id="calc" type="Hidden">
|
||||||
|
<auflage>
|
||||||
|
<grenze formel="0.26*$Vauflage$V*$CVcalc_rabatt_contact.accountType$CV">1-</grenze>
|
||||||
|
</auflage>
|
||||||
|
</option>
|
||||||
|
|
||||||
|
</artikel>
|
||||||
|
</kalkulation>
|
||||||
|
|||||||
@ -64,17 +64,17 @@ class DashboardController extends AbstractController
|
|||||||
$sales2 = array();
|
$sales2 = array();
|
||||||
$sales3 = array();
|
$sales3 = array();
|
||||||
for ($i = 1; $i <= 12; $i++) {
|
for ($i = 1; $i <= 12; $i++) {
|
||||||
if(isset($tempSales1[$i])) {
|
if (isset($tempSales1[$i])) {
|
||||||
$sales1[] = round($tempSales1[$i]);
|
$sales1[] = round($tempSales1[$i]);
|
||||||
} else {
|
} else {
|
||||||
$sales1[] = 0;
|
$sales1[] = 0;
|
||||||
}
|
}
|
||||||
if(isset($tempSales2[$i])) {
|
if (isset($tempSales2[$i])) {
|
||||||
$sales2[] = round($tempSales2[$i]);
|
$sales2[] = round($tempSales2[$i]);
|
||||||
} else {
|
} else {
|
||||||
$sales2[] = 0;
|
$sales2[] = 0;
|
||||||
}
|
}
|
||||||
if(isset($tempSales3[$i])) {
|
if (isset($tempSales3[$i])) {
|
||||||
$sales3[] = round($tempSales3[$i]);
|
$sales3[] = round($tempSales3[$i]);
|
||||||
} else {
|
} else {
|
||||||
$sales3[] = 0;
|
$sales3[] = 0;
|
||||||
@ -82,7 +82,7 @@ class DashboardController extends AbstractController
|
|||||||
}
|
}
|
||||||
$chart = $chartBuilder->createChart(Chart::TYPE_LINE);
|
$chart = $chartBuilder->createChart(Chart::TYPE_LINE);
|
||||||
$chart->setData([
|
$chart->setData([
|
||||||
'labels' => ['Januar', 'Februar', 'März', 'April', 'May', 'Juli', 'Juni', 'August', 'September', 'Oktober', 'November', 'Dezember'],
|
'labels' => ['Januar', 'Februar', 'März', 'April', 'May', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
|
||||||
'datasets' => [
|
'datasets' => [
|
||||||
[
|
[
|
||||||
'label' => $year1,
|
'label' => $year1,
|
||||||
|
|||||||
@ -25,9 +25,9 @@ class OrderposExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
private $_formFactory = null;
|
private $_formFactory = null;
|
||||||
private $_entityManager = null;
|
private $_entityManager = null;
|
||||||
private $_shopService = null;
|
private $_shopService = null;
|
||||||
/** @var Form */
|
/** @var Form */
|
||||||
private $_form = null;
|
private $_form = null;
|
||||||
function __construct(FormFactoryInterface $formFactory, EntityManagerInterface $entityManager, Shop $shopService)
|
public function __construct(FormFactoryInterface $formFactory, EntityManagerInterface $entityManager, Shop $shopService)
|
||||||
{
|
{
|
||||||
$this->_formFactory = $formFactory;
|
$this->_formFactory = $formFactory;
|
||||||
$this->_entityManager = $entityManager;
|
$this->_entityManager = $entityManager;
|
||||||
@ -88,7 +88,7 @@ class OrderposExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
$row[0]->getOrder()->getAlias(),
|
$row[0]->getOrder()->getAlias(),
|
||||||
$row[0]->getOrder()->getCreated()->format('Y-m-d H:i:s'),
|
$row[0]->getOrder()->getCreated()->format('Y-m-d H:i:s'),
|
||||||
$row[0]->getOrder()->getStatus(),
|
$row[0]->getOrder()->getStatus(),
|
||||||
$row[0]->getOrder()->getBrutto(),
|
round($row[0]->getPriceAllBrutto(), 2),
|
||||||
$row[0]->getOrder()->getPackage(),
|
$row[0]->getOrder()->getPackage(),
|
||||||
$row[0]->getOrder()->getContact()->getUsername(),
|
$row[0]->getOrder()->getContact()->getUsername(),
|
||||||
$row[0]->getProduct()->getUid(),
|
$row[0]->getProduct()->getUid(),
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace PSC\Shop\ContactBundle\Api;
|
namespace PSC\Shop\ContactBundle\Api;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Model;
|
use Nelmio\ApiDocBundle\Annotation\Model;
|
||||||
@ -16,13 +16,14 @@ use Symfony\Component\HttpKernel\KernelInterface;
|
|||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Annotation\Route;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
||||||
use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
|
use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
|
||||||
|
|
||||||
class Login extends AbstractController
|
class Login extends AbstractController
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Get JWT Token with username and password
|
* Get JWT Token with username and password
|
||||||
*/
|
*/
|
||||||
#[OA\Response(response: 200, description: 'get jwt token', content: new OA\JsonContent(ref: new Model(type: \PSC\Shop\ContactBundle\Dto\Login\Output::class)))]
|
#[OA\Response(response: 200, description: 'get jwt token', content: new OA\JsonContent(ref: new Model(type: \PSC\Shop\ContactBundle\Dto\Login\Output::class)))]
|
||||||
#[OA\RequestBody(description: 'User Auth',content: new OA\JsonContent(ref: new Model(type: Input::class)))]
|
#[OA\RequestBody(description: 'User Auth', content: new OA\JsonContent(ref: new Model(type: Input::class)))]
|
||||||
#[OA\Tag(name: 'Contact')]
|
#[OA\Tag(name: 'Contact')]
|
||||||
#[Route(path: '/login', methods: ['POST'])]
|
#[Route(path: '/login', methods: ['POST'])]
|
||||||
#[ParamConverter('input', class: '\PSC\Shop\ContactBundle\Dto\Login\Input', converter: 'psc_rest.request_body')]
|
#[ParamConverter('input', class: '\PSC\Shop\ContactBundle\Dto\Login\Input', converter: 'psc_rest.request_body')]
|
||||||
@ -35,7 +36,7 @@ class Login extends AbstractController
|
|||||||
->getRepository(Contact::class)
|
->getRepository(Contact::class)
|
||||||
->getContactByEmailAndShop($input->username, $shop->getUid());
|
->getContactByEmailAndShop($input->username, $shop->getUid());
|
||||||
|
|
||||||
if(!$user) {
|
if (!$user) {
|
||||||
return new JsonResponse(['message' => 'contact '.$input->username.' not found'], 404);
|
return new JsonResponse(['message' => 'contact '.$input->username.' not found'], 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +47,8 @@ class Login extends AbstractController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$output = new Output();
|
$output = new Output();
|
||||||
|
$output->userName = $user->getContact()->getUsername();
|
||||||
|
$output->email = $user->getContact()->getEmail();
|
||||||
$output->token = $jwtManager->create($user->getContact());
|
$output->token = $jwtManager->create($user->getContact());
|
||||||
|
|
||||||
return $this->json($output);
|
return $this->json($output);
|
||||||
|
|||||||
@ -84,7 +84,7 @@ class EditController extends AbstractController
|
|||||||
$tmp = array();
|
$tmp = array();
|
||||||
/** @var Product $product */
|
/** @var Product $product */
|
||||||
foreach ($contacts as $contact) {
|
foreach ($contacts as $contact) {
|
||||||
foreach($contact->getShops() as $shop) {
|
foreach ($contact->getShops() as $shop) {
|
||||||
$tmp[] = $shop->getTitle();
|
$tmp[] = $shop->getTitle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -135,7 +135,7 @@ class EditController extends AbstractController
|
|||||||
if ($form->isSubmitted() && $form->isValid()) {
|
if ($form->isSubmitted() && $form->isValid()) {
|
||||||
$contact->setProducts($this->merge([$contact->getProductsOrg(), $contact->getProductsSub()]));
|
$contact->setProducts($this->merge([$contact->getProductsOrg(), $contact->getProductsSub()]));
|
||||||
$contact->setUuid(Uuid::uuid4());
|
$contact->setUuid(Uuid::uuid4());
|
||||||
|
|
||||||
$entityManager->persist($contact);
|
$entityManager->persist($contact);
|
||||||
|
|
||||||
$entityManager->flush();
|
$entityManager->flush();
|
||||||
@ -174,7 +174,7 @@ class EditController extends AbstractController
|
|||||||
$contactDoc->setLayouterEmail($contact->layouterEmail);
|
$contactDoc->setLayouterEmail($contact->layouterEmail);
|
||||||
$contactDoc->setLayouterCountryCode($contact->layouterCountryCode);
|
$contactDoc->setLayouterCountryCode($contact->layouterCountryCode);
|
||||||
$contactDoc->setLayouterCountryName($contact->layouterCountryName);
|
$contactDoc->setLayouterCountryName($contact->layouterCountryName);
|
||||||
|
$contactDoc->setAccountType($contact->accountType);
|
||||||
$documentManager->persist($contactDoc);
|
$documentManager->persist($contactDoc);
|
||||||
$documentManager->flush();
|
$documentManager->flush();
|
||||||
|
|
||||||
@ -309,7 +309,7 @@ class EditController extends AbstractController
|
|||||||
$contact->layouterCountryName = $contactDoc->getLayouterCountryName();
|
$contact->layouterCountryName = $contactDoc->getLayouterCountryName();
|
||||||
$contact->layouterCountryCode = $contactDoc->getLayouterCountryCode();
|
$contact->layouterCountryCode = $contactDoc->getLayouterCountryCode();
|
||||||
$contact->layouterEmail = $contactDoc->getLayouterEmail();
|
$contact->layouterEmail = $contactDoc->getLayouterEmail();
|
||||||
|
$contact->accountType = $contactDoc->getAccountType();
|
||||||
$contact->setProductsOrg($contact->getProducts());
|
$contact->setProductsOrg($contact->getProducts());
|
||||||
$contact->setProductsSub($contact->getProducts());
|
$contact->setProductsSub($contact->getProducts());
|
||||||
} elseif (!$contactDoc) {
|
} elseif (!$contactDoc) {
|
||||||
@ -325,6 +325,7 @@ class EditController extends AbstractController
|
|||||||
$contactDoc->setLayouterEmail($contact->layouterEmail);
|
$contactDoc->setLayouterEmail($contact->layouterEmail);
|
||||||
$contactDoc->setLayouterCountryCode($contact->layouterCountryCode);
|
$contactDoc->setLayouterCountryCode($contact->layouterCountryCode);
|
||||||
$contactDoc->setLayouterCountryName($contact->layouterCountryName);
|
$contactDoc->setLayouterCountryName($contact->layouterCountryName);
|
||||||
|
$contactDoc->setAccountType($contact->accountType);
|
||||||
|
|
||||||
$contact->setProductsOrg($contact->getProducts());
|
$contact->setProductsOrg($contact->getProducts());
|
||||||
$contact->setProductsSub($contact->getProducts());
|
$contact->setProductsSub($contact->getProducts());
|
||||||
@ -344,7 +345,7 @@ class EditController extends AbstractController
|
|||||||
$form->handleRequest($request);
|
$form->handleRequest($request);
|
||||||
|
|
||||||
if ($form->isSubmitted() && $form->isValid()) {
|
if ($form->isSubmitted() && $form->isValid()) {
|
||||||
if($form->get('password')->getData() !== null) {
|
if ($form->get('password')->getData() !== null) {
|
||||||
$contact->setPassword(password_hash($form->get('password')->getData(), PASSWORD_DEFAULT));
|
$contact->setPassword(password_hash($form->get('password')->getData(), PASSWORD_DEFAULT));
|
||||||
}
|
}
|
||||||
$contact->setProducts($this->merge([$contact->getProductsOrg(), $contact->getProductsSub()]));
|
$contact->setProducts($this->merge([$contact->getProductsOrg(), $contact->getProductsSub()]));
|
||||||
@ -390,7 +391,7 @@ class EditController extends AbstractController
|
|||||||
$contactDoc->setLayouterEmail($contact->layouterEmail);
|
$contactDoc->setLayouterEmail($contact->layouterEmail);
|
||||||
$contactDoc->setLayouterCountryCode($contact->layouterCountryCode);
|
$contactDoc->setLayouterCountryCode($contact->layouterCountryCode);
|
||||||
$contactDoc->setLayouterCountryName($contact->layouterCountryName);
|
$contactDoc->setLayouterCountryName($contact->layouterCountryName);
|
||||||
|
$contactDoc->setAccountType($contact->accountType);
|
||||||
$this->historyService->createHistoryEntry(new PSCHistory((string)$contact->getUid()), $contact, $contactDoc);
|
$this->historyService->createHistoryEntry(new PSCHistory((string)$contact->getUid()), $contact, $contactDoc);
|
||||||
$entityManager->persist($contact);
|
$entityManager->persist($contact);
|
||||||
$entityManager->flush();
|
$entityManager->flush();
|
||||||
|
|||||||
@ -13,4 +13,19 @@ class Output
|
|||||||
* @OA\Property(type="string")
|
* @OA\Property(type="string")
|
||||||
*/
|
*/
|
||||||
public string $token;
|
public string $token;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @OA\Property(type="string")
|
||||||
|
*/
|
||||||
|
public string $userName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @OA\Property(type="string")
|
||||||
|
*/
|
||||||
|
public string $email;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,7 @@ namespace PSC\Shop\ContactBundle\Form\Backend\General;
|
|||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Doctrine\ORM\EntityRepository;
|
use Doctrine\ORM\EntityRepository;
|
||||||
|
use PSC\Shop\ContactBundle\Model\AccountType;
|
||||||
use PSC\Shop\EntityBundle\Entity\Payment;
|
use PSC\Shop\EntityBundle\Entity\Payment;
|
||||||
use PSC\Shop\EntityBundle\Entity\Productgroup;
|
use PSC\Shop\EntityBundle\Entity\Productgroup;
|
||||||
use PSC\Shop\EntityBundle\Entity\Shipping;
|
use PSC\Shop\EntityBundle\Entity\Shipping;
|
||||||
@ -28,6 +29,7 @@ use Symfony\Component\Form\AbstractType;
|
|||||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\DateType;
|
use Symfony\Component\Form\Extension\Core\Type\DateType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\EnumType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\FormType;
|
use Symfony\Component\Form\Extension\Core\Type\FormType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
|
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\LanguageType;
|
use Symfony\Component\Form\Extension\Core\Type\LanguageType;
|
||||||
@ -224,6 +226,15 @@ class ContactType extends AbstractType
|
|||||||
'choice_value' => 'uid',
|
'choice_value' => 'uid',
|
||||||
'multiple' => true
|
'multiple' => true
|
||||||
))
|
))
|
||||||
|
->add('accountType', EnumType::class, [
|
||||||
|
'required' => true,
|
||||||
|
'class' => AccountType::class,
|
||||||
|
'label' => 'accountType',
|
||||||
|
'label_attr' => [
|
||||||
|
'data-bs-toggle' => "tooltip",
|
||||||
|
'data-bs-html' => '{{ contact.accountType }}'
|
||||||
|
]
|
||||||
|
])
|
||||||
->add('bankKtoName', TextType::class, [
|
->add('bankKtoName', TextType::class, [
|
||||||
'required' => false,
|
'required' => false,
|
||||||
'label' => 'accountowner',
|
'label' => 'accountowner',
|
||||||
|
|||||||
10
src/new/src/PSC/Shop/ContactBundle/Model/AccountType.php
Normal file
10
src/new/src/PSC/Shop/ContactBundle/Model/AccountType.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Shop\ContactBundle\Model;
|
||||||
|
|
||||||
|
enum AccountType: int
|
||||||
|
{
|
||||||
|
case PERSONAL = 1;
|
||||||
|
case COMPANY = 2;
|
||||||
|
case ASSOCIATION = 3;
|
||||||
|
}
|
||||||
@ -90,6 +90,8 @@ class Contact
|
|||||||
#[OA\Property(type: 'string')]
|
#[OA\Property(type: 'string')]
|
||||||
private string $custom24 = "";
|
private string $custom24 = "";
|
||||||
|
|
||||||
|
private AccountType $accountType;
|
||||||
|
|
||||||
#[OA\Property(type: 'string')]
|
#[OA\Property(type: 'string')]
|
||||||
private string $countryCode = "";
|
private string $countryCode = "";
|
||||||
|
|
||||||
@ -100,6 +102,17 @@ class Contact
|
|||||||
#[OA\Property(type: 'array', items: new OA\Items(ref: new Model(type: Role::class)))]
|
#[OA\Property(type: 'array', items: new OA\Items(ref: new Model(type: Role::class)))]
|
||||||
private array $roles = [];
|
private array $roles = [];
|
||||||
|
|
||||||
|
|
||||||
|
public function getAccountType(): AccountType
|
||||||
|
{
|
||||||
|
return $this->accountType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAccountType(AccountType $var): void
|
||||||
|
{
|
||||||
|
$this->accountType = $var;
|
||||||
|
}
|
||||||
|
|
||||||
public function getShops(): array
|
public function getShops(): array
|
||||||
{
|
{
|
||||||
return $this->shops;
|
return $this->shops;
|
||||||
@ -118,6 +131,7 @@ class Contact
|
|||||||
{
|
{
|
||||||
$this->layouterData = new LayouterData();
|
$this->layouterData = new LayouterData();
|
||||||
$this->account = new Account();
|
$this->account = new Account();
|
||||||
|
$this->accountType = AccountType::PERSONAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUuid(): string
|
public function getUuid(): string
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
customer: Kunde
|
customer: Kunde
|
||||||
|
accountType: Kontotyp
|
||||||
detail: bearbeiten
|
detail: bearbeiten
|
||||||
Company: Firma
|
Company: Firma
|
||||||
Companyaddition: Firma Zusatz
|
Companyaddition: Firma Zusatz
|
||||||
@ -125,4 +126,4 @@ grossprice: Preis Brutto
|
|||||||
status: Status
|
status: Status
|
||||||
details: Details
|
details: Details
|
||||||
yes: Ja
|
yes: Ja
|
||||||
no: Nein
|
no: Nein
|
||||||
|
|||||||
@ -300,18 +300,32 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="header"><h5>{{ form_label(form.information) }}</h5></div>
|
<div class="header"><h5>{{ form_label(form.information) }}</h5></div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{{ form_widget(form.information) }}
|
{{ form_widget(form.information) }}
|
||||||
|
</div>
|
||||||
|
{{ form_errors(form.information) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ form_errors(form.information) }}
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="header"><h5>{{ form_label(form.accountType) }}</h5></div>
|
||||||
|
<div class="body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{{ form_widget(form.accountType) }}
|
||||||
|
</div>
|
||||||
|
{{ form_errors(form.accountType) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -270,7 +270,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="header"><h5>{{ form_label(form.vonwo) }}</h5></div>
|
<div class="header"><h5>{{ form_label(form.vonwo) }}</h5></div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
@ -283,15 +283,28 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="header"><h5>{{ form_label(form.information) }}</h5></div>
|
||||||
|
<div class="body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{{ form_widget(form.information) }}
|
||||||
|
</div>
|
||||||
|
{{ form_errors(form.information) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="header"><h5>{{ form_label(form.information) }}</h5></div>
|
<div class="header"><h5>{{ form_label(form.accountType) }}</h5></div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{{ form_widget(form.information) }}
|
{{ form_widget(form.accountType) }}
|
||||||
</div>
|
</div>
|
||||||
{{ form_errors(form.information) }}
|
{{ form_errors(form.accountType) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -149,6 +149,8 @@ class Contact
|
|||||||
$contact->setEnable((bool)$contactEntity->isEnabled());
|
$contact->setEnable((bool)$contactEntity->isEnabled());
|
||||||
$contact->setCollectingOrders((bool)$contactEntity->getCollectingOrders());
|
$contact->setCollectingOrders((bool)$contactEntity->getCollectingOrders());
|
||||||
|
|
||||||
|
$contact->setAccountType($contactDoc->getAccountType());
|
||||||
|
|
||||||
$contact->setCustom1((string)$contactDoc->getCustom1());
|
$contact->setCustom1((string)$contactDoc->getCustom1());
|
||||||
$contact->setCustom2((string)$contactDoc->getCustom2());
|
$contact->setCustom2((string)$contactDoc->getCustom2());
|
||||||
$contact->setCustom3((string)$contactDoc->getCustom3());
|
$contact->setCustom3((string)$contactDoc->getCustom3());
|
||||||
|
|||||||
@ -9,17 +9,17 @@ use PSC\Shop\EntityBundle\Entity\Order;
|
|||||||
|
|
||||||
class Contact
|
class Contact
|
||||||
{
|
{
|
||||||
|
public function __construct(
|
||||||
public function __construct(private readonly EntityManagerInterface $entityManager,
|
private readonly EntityManagerInterface $entityManager,
|
||||||
private readonly \PSC\Shop\ContactBundle\Transformer\Model\Contact $modelTransformer,
|
private readonly \PSC\Shop\ContactBundle\Transformer\Model\Contact $modelTransformer,
|
||||||
private readonly DocumentManager $documentManager)
|
private readonly DocumentManager $documentManager
|
||||||
{
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function toDb(\PSC\Shop\ContactBundle\Model\Contact $contact, Order $orderEntity)
|
public function toDb(\PSC\Shop\ContactBundle\Model\Contact $contact, Order $orderEntity)
|
||||||
{
|
{
|
||||||
$contact = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Contact::class)->findOneBy(['uuid' => $contact->getUuid()]);
|
$contact = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Contact::class)->findOneBy(['uuid' => $contact->getUuid()]);
|
||||||
if($contact) {
|
if ($contact) {
|
||||||
$orderEntity->setContact($contact);
|
$orderEntity->setContact($contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,6 +28,5 @@ class Contact
|
|||||||
public function fromDb(\PSC\Shop\ContactBundle\Model\Contact $contact, PSCContact $contactEntity)
|
public function fromDb(\PSC\Shop\ContactBundle\Model\Contact $contact, PSCContact $contactEntity)
|
||||||
{
|
{
|
||||||
$this->modelTransformer->fromDb($contact, $contactEntity);
|
$this->modelTransformer->fromDb($contact, $contactEntity);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,6 +16,7 @@ namespace PSC\Shop\EntityBundle\Document;
|
|||||||
use Doctrine\ODM\MongoDB\Mapping\Annotations\Field;
|
use Doctrine\ODM\MongoDB\Mapping\Annotations\Field;
|
||||||
use Doctrine\ODM\MongoDB\Mapping\Annotations\Id;
|
use Doctrine\ODM\MongoDB\Mapping\Annotations\Id;
|
||||||
use Doctrine\ODM\MongoDB\Mapping\Annotations\Document;
|
use Doctrine\ODM\MongoDB\Mapping\Annotations\Document;
|
||||||
|
use PSC\Shop\ContactBundle\Model\AccountType;
|
||||||
|
|
||||||
#[Document]
|
#[Document]
|
||||||
class Contact
|
class Contact
|
||||||
@ -25,154 +26,154 @@ class Contact
|
|||||||
*/
|
*/
|
||||||
#[Id]
|
#[Id]
|
||||||
protected $id;
|
protected $id;
|
||||||
/**
|
/**
|
||||||
* @var string $uid
|
* @var string $uid
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $uid;
|
protected $uid;
|
||||||
/**
|
/**
|
||||||
* @var string $kundenNr;
|
* @var string $kundenNr;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $kundenNr;
|
protected $kundenNr;
|
||||||
/**
|
/**
|
||||||
* @var string $defaultPayment;
|
* @var string $defaultPayment;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'int')]
|
#[Field(type: 'int')]
|
||||||
protected $defaultPayment;
|
protected $defaultPayment;
|
||||||
/**
|
/**
|
||||||
* @var string $defaultShipment;
|
* @var string $defaultShipment;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'int')]
|
#[Field(type: 'int')]
|
||||||
protected $defaultShipment;
|
protected $defaultShipment;
|
||||||
/**
|
/**
|
||||||
* @var string $calcValue1;
|
* @var string $calcValue1;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $calcValue1;
|
protected $calcValue1;
|
||||||
/**
|
/**
|
||||||
* @var string $calcValue2;
|
* @var string $calcValue2;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $calcValue2;
|
protected $calcValue2;
|
||||||
/**
|
/**
|
||||||
* @var string $custom1;
|
* @var string $custom1;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom1;
|
protected $custom1;
|
||||||
/**
|
/**
|
||||||
* @var string $custom2;
|
* @var string $custom2;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom2;
|
protected $custom2;
|
||||||
/**
|
/**
|
||||||
* @var string $custom3;
|
* @var string $custom3;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom3;
|
protected $custom3;
|
||||||
/**
|
/**
|
||||||
* @var string $custom4;
|
* @var string $custom4;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom4;
|
protected $custom4;
|
||||||
/**
|
/**
|
||||||
* @var string $custom5;
|
* @var string $custom5;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom5;
|
protected $custom5;
|
||||||
/**
|
/**
|
||||||
* @var string $custom6;
|
* @var string $custom6;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom6;
|
protected $custom6;
|
||||||
/**
|
/**
|
||||||
* @var string $custom7;
|
* @var string $custom7;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom7;
|
protected $custom7;
|
||||||
/**
|
/**
|
||||||
* @var string $custom8;
|
* @var string $custom8;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom8;
|
protected $custom8;
|
||||||
/**
|
/**
|
||||||
* @var string $custom9;
|
* @var string $custom9;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom9;
|
protected $custom9;
|
||||||
/**
|
/**
|
||||||
* @var string $custom10;
|
* @var string $custom10;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom10;
|
protected $custom10;
|
||||||
/**
|
/**
|
||||||
* @var string $custom11;
|
* @var string $custom11;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom11;
|
protected $custom11;
|
||||||
/**
|
/**
|
||||||
* @var string $custom12;
|
* @var string $custom12;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom12;
|
protected $custom12;
|
||||||
/**
|
/**
|
||||||
* @var string $custom13;
|
* @var string $custom13;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom13;
|
protected $custom13;
|
||||||
/**
|
/**
|
||||||
* @var string $custom14;
|
* @var string $custom14;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom14;
|
protected $custom14;
|
||||||
/**
|
/**
|
||||||
* @var string $custom15;
|
* @var string $custom15;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom15;
|
protected $custom15;
|
||||||
/**
|
/**
|
||||||
* @var string $custom16;
|
* @var string $custom16;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom16;
|
protected $custom16;
|
||||||
/**
|
/**
|
||||||
* @var string $custom17;
|
* @var string $custom17;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom17;
|
protected $custom17;
|
||||||
/**
|
/**
|
||||||
* @var string $custom18;
|
* @var string $custom18;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom18;
|
protected $custom18;
|
||||||
/**
|
/**
|
||||||
* @var string $custom19;
|
* @var string $custom19;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom19;
|
protected $custom19;
|
||||||
/**
|
/**
|
||||||
* @var string $custom20;
|
* @var string $custom20;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom20;
|
protected $custom20;
|
||||||
/**
|
/**
|
||||||
* @var string $custom21;
|
* @var string $custom21;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom21;
|
protected $custom21;
|
||||||
/**
|
/**
|
||||||
* @var string $custom22;
|
* @var string $custom22;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom22;
|
protected $custom22;
|
||||||
/**
|
/**
|
||||||
* @var string $custom23;
|
* @var string $custom23;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom23;
|
protected $custom23;
|
||||||
/**
|
/**
|
||||||
* @var string $custom24;
|
* @var string $custom24;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $custom24;
|
protected $custom24;
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
@ -182,39 +183,50 @@ class Contact
|
|||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $layouterCountryCode;
|
protected $layouterCountryCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var boolean $showOtherOrders;
|
* @var boolean $showOtherOrders;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'bool')]
|
#[Field(type: 'bool')]
|
||||||
protected $showOtherOrders;
|
protected $showOtherOrders;
|
||||||
/**
|
/**
|
||||||
* @var integer $showOtherOrdersAccountFilter;
|
* @var integer $showOtherOrdersAccountFilter;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'int')]
|
#[Field(type: 'int')]
|
||||||
protected $showOtherOrdersAccountFilter;
|
protected $showOtherOrdersAccountFilter;
|
||||||
/**
|
/**
|
||||||
* @var \PSC\Shop\EntityBundle\Entity\Account $showOtherOrdersAccount;
|
* @var \PSC\Shop\EntityBundle\Entity\Account $showOtherOrdersAccount;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'int')]
|
#[Field(type: 'int')]
|
||||||
protected $showOtherOrdersAccount;
|
protected $showOtherOrdersAccount;
|
||||||
#[Field(type: 'hash')]
|
#[Field(type: 'hash')]
|
||||||
protected $pluginSettings = [];
|
protected $pluginSettings = [];
|
||||||
/**
|
/**
|
||||||
* @var string $extraSettings;
|
* @var string $extraSettings;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $extraSettings;
|
protected $extraSettings;
|
||||||
|
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $layouterSettings;
|
protected $layouterSettings;
|
||||||
/**
|
/**
|
||||||
* @var float $priceFactor;
|
* @var float $priceFactor;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'float')]
|
#[Field(type: 'float')]
|
||||||
protected $priceFactor;
|
protected $priceFactor;
|
||||||
/**
|
|
||||||
* @return bool
|
#[Field(type: 'int')]
|
||||||
*/
|
protected $accountType = 1;
|
||||||
|
|
||||||
|
public function getAccountType(): AccountType
|
||||||
|
{
|
||||||
|
return AccountType::tryFrom($this->accountType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAccountType(AccountType $type): void
|
||||||
|
{
|
||||||
|
$this->accountType = $type->value;
|
||||||
|
}
|
||||||
|
|
||||||
public function isShowOtherOrders()
|
public function isShowOtherOrders()
|
||||||
{
|
{
|
||||||
return $this->showOtherOrders;
|
return $this->showOtherOrders;
|
||||||
@ -816,7 +828,7 @@ class Contact
|
|||||||
|
|
||||||
public function getLayouterSettings(): array
|
public function getLayouterSettings(): array
|
||||||
{
|
{
|
||||||
if($this->layouterSettings == "") {
|
if ($this->layouterSettings == "") {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
return json_decode($this->layouterSettings, true);
|
return json_decode($this->layouterSettings, true);
|
||||||
|
|||||||
37
src/new/src/PSC/Shop/EntityBundle/Document/Embed/Contact.php
Normal file
37
src/new/src/PSC/Shop/EntityBundle/Document/Embed/Contact.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Shop\EntityBundle\Document\Embed;
|
||||||
|
|
||||||
|
use Doctrine\ODM\MongoDB\Mapping\Annotations\EmbeddedDocument;
|
||||||
|
use Doctrine\ODM\MongoDB\Mapping\Annotations\Field;
|
||||||
|
use PSC\Shop\ContactBundle\Model\AccountType;
|
||||||
|
|
||||||
|
#[EmbeddedDocument]
|
||||||
|
class Contact
|
||||||
|
{
|
||||||
|
#[Field(type: 'string')]
|
||||||
|
private $uuid;
|
||||||
|
|
||||||
|
#[Field(type: 'int')]
|
||||||
|
private $accountType;
|
||||||
|
|
||||||
|
public function getUuid(): string
|
||||||
|
{
|
||||||
|
return (string)$this->uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setUuid(string $var): void
|
||||||
|
{
|
||||||
|
$this->uuid = $var;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAccountType(): AccountType
|
||||||
|
{
|
||||||
|
return AccountType::tryFrom($this->accountType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAccountType(AccountType $var): void
|
||||||
|
{
|
||||||
|
$this->accountType = $var->value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,16 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
|
||||||
* PrintshopCreator Suite
|
|
||||||
*
|
|
||||||
* PHP Version 5.3
|
|
||||||
*
|
|
||||||
* @author Thomas Peterson <info@thomas-peterson.de>
|
|
||||||
* @copyright 2012-2013 PrintshopCreator GmbH
|
|
||||||
* @license Private
|
|
||||||
* @link http://www.printshopcreator.de
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace PSC\Shop\EntityBundle\Document\Embed;
|
namespace PSC\Shop\EntityBundle\Document\Embed;
|
||||||
|
|
||||||
use Doctrine\ODM\MongoDB\Mapping\Annotations\Field;
|
use Doctrine\ODM\MongoDB\Mapping\Annotations\Field;
|
||||||
@ -21,11 +10,11 @@ use Doctrine\ODM\MongoDB\Mapping\Annotations\EmbeddedDocument;
|
|||||||
#[EmbeddedDocument]
|
#[EmbeddedDocument]
|
||||||
class ContactAddress
|
class ContactAddress
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
invoiceAddressSaved" : { "id" : "2", "uuid" : "0001-ac11000b-546c8de6-cedf-bb260533", "display" : true,
|
invoiceAddressSaved" : { "id" : "2", "uuid" : "0001-ac11000b-546c8de6-cedf-bb260533", "display" : true,
|
||||||
"install_id" : "1", "contact_id" : "1", "created" : "2014-11-19 13:32:38", "updated" : "2019-01-24 17:47:24", "type" : "1", "anrede" : "3", "pos" : null, "company" : "Musterfirma", "company2" : null, "kostenstellung" : null, "abteilung" :
|
"install_id" : "1", "contact_id" : "1", "created" : "2014-11-19 13:32:38", "updated" : "2019-01-24 17:47:24", "type" : "1", "anrede" : "3", "pos" : null, "company" : "Musterfirma", "company2" : null, "kostenstellung" : null, "abteilung" :
|
||||||
null, "firstname" : "admin", "lastname" : "admin", "street" : "Musterstrasse", "house_number" : "1", "zip" : "12345", "city" : "Musterort", "phone" : "12345", "mobil_phone" : "", "email" : "admin@shop.de", "country" : "AL", "fax" : "", "position" : null, "ustid" : null, "zusatz1" : null, "zusatz2" : null, "kundenNr" : "" }
|
null, "firstname" : "admin", "lastname" : "admin", "street" : "Musterstrasse", "house_number" : "1", "zip" : "12345", "city" : "Musterort", "phone" : "12345", "mobil_phone" : "", "email" : "admin@shop.de", "country" : "AL", "fax" : "", "position" : null, "ustid" : null, "zusatz1" : null, "zusatz2" : null, "kundenNr" : "" }
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
@ -34,119 +23,119 @@ class ContactAddress
|
|||||||
|
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $uuid;
|
private $uuid;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $lastname;
|
private $lastname;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $street;
|
private $street;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $houseNumber;
|
private $houseNumber;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $zip;
|
private $zip;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $city;
|
private $city;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $phone;
|
private $phone;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $mobilPhone;
|
private $mobilPhone;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $email;
|
private $email;
|
||||||
/**
|
/**
|
||||||
* @var integer
|
* @var integer
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'int')]
|
#[Field(type: 'int')]
|
||||||
private $type;
|
private $type;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $company;
|
private $company;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $anrede;
|
private $anrede;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $country;
|
private $country;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $fax;
|
private $fax;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $company2;
|
private $company2;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $kostenstellung;
|
private $kostenstellung;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $abteilung;
|
private $abteilung;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $position;
|
private $position;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $ustid;
|
private $ustid;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $zusatz1;
|
private $zusatz1;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $zusatz2;
|
private $zusatz2;
|
||||||
/**
|
/**
|
||||||
* @var int
|
* @var int
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'int')]
|
#[Field(type: 'int')]
|
||||||
private $pos;
|
private $pos;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $kundenNr;
|
private $kundenNr;
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getFirstname()
|
public function getFirstname()
|
||||||
{
|
{
|
||||||
return $this->firstname;
|
return $this->firstname;
|
||||||
|
|||||||
@ -16,40 +16,41 @@ namespace PSC\Shop\EntityBundle\Document;
|
|||||||
use Doctrine\ODM\MongoDB\Mapping\Annotations\Field;
|
use Doctrine\ODM\MongoDB\Mapping\Annotations\Field;
|
||||||
use Doctrine\ODM\MongoDB\Mapping\Annotations\Id;
|
use Doctrine\ODM\MongoDB\Mapping\Annotations\Id;
|
||||||
use Doctrine\ODM\MongoDB\Mapping\Annotations\Document;
|
use Doctrine\ODM\MongoDB\Mapping\Annotations\Document;
|
||||||
|
use Symfony\Component\Security\Core\User\UserInterface;
|
||||||
|
|
||||||
#[Document]
|
#[Document]
|
||||||
class Instance
|
class Instance implements UserInterface
|
||||||
{
|
{
|
||||||
#[Id]
|
#[Id]
|
||||||
protected $id;
|
protected $id;
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $appId;
|
protected $appId;
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $syncServer;
|
protected $syncServer;
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $ftpUsername;
|
protected $ftpUsername;
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $ftpPassword;
|
protected $ftpPassword;
|
||||||
/**
|
/**
|
||||||
* @var int $smtpPort;
|
* @var int $smtpPort;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'int')]
|
#[Field(type: 'int')]
|
||||||
protected $smtpPort;
|
protected $smtpPort;
|
||||||
/**
|
/**
|
||||||
* @var boolean $smtpOwn
|
* @var boolean $smtpOwn
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'bool')]
|
#[Field(type: 'bool')]
|
||||||
protected $smtpOwn;
|
protected $smtpOwn;
|
||||||
/**
|
/**
|
||||||
* @var boolean $smtpTls
|
* @var boolean $smtpTls
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'bool')]
|
#[Field(type: 'bool')]
|
||||||
protected $smtpTls;
|
protected $smtpTls;
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $smtpHost;
|
protected $smtpHost;
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $smtpPassword;
|
protected $smtpPassword;
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $smtpUsername;
|
protected $smtpUsername;
|
||||||
|
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
@ -94,54 +95,54 @@ class Instance
|
|||||||
#[Field(type: 'int')]
|
#[Field(type: 'int')]
|
||||||
protected $parcelCancelationNumberStart = 0;
|
protected $parcelCancelationNumberStart = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string $extraSettings;
|
* @var string $extraSettings;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $extraSettings;
|
protected $extraSettings;
|
||||||
/**
|
/**
|
||||||
* @var string $maintenanceText;
|
* @var string $maintenanceText;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $maintenanceText;
|
protected $maintenanceText;
|
||||||
/**
|
/**
|
||||||
* @var string $maintenanceTitle;
|
* @var string $maintenanceTitle;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $maintenanceTitle;
|
protected $maintenanceTitle;
|
||||||
/**
|
/**
|
||||||
* @var bool $maintenanceMode;
|
* @var bool $maintenanceMode;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'bool')]
|
#[Field(type: 'bool')]
|
||||||
protected $maintenanceMode;
|
protected $maintenanceMode;
|
||||||
/**
|
/**
|
||||||
* @var string $supporturl;
|
* @var string $supporturl;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $supporturl;
|
protected $supporturl;
|
||||||
/**
|
/**
|
||||||
* @var string $supporttoken;
|
* @var string $supporttoken;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $supporttoken;
|
protected $supporttoken;
|
||||||
/**
|
/**
|
||||||
* @var string $monitoringkey;
|
* @var string $monitoringkey;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $monitoringkey;
|
protected $monitoringkey;
|
||||||
/**
|
/**
|
||||||
* @var string $supportprotokoll;
|
* @var string $supportprotokoll;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'bool')]
|
#[Field(type: 'bool')]
|
||||||
protected $supportprotokoll;
|
protected $supportprotokoll;
|
||||||
/**
|
/**
|
||||||
* @var string $supportlogin;
|
* @var string $supportlogin;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'bool')]
|
#[Field(type: 'bool')]
|
||||||
protected $supportlogin;
|
protected $supportlogin;
|
||||||
/**
|
/**
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function getId()
|
public function getId()
|
||||||
{
|
{
|
||||||
return $this->id;
|
return $this->id;
|
||||||
@ -631,6 +632,17 @@ class Instance
|
|||||||
{
|
{
|
||||||
$this->parcelCancelationNumberStart = $parcelCancelationNumberStart;
|
$this->parcelCancelationNumberStart = $parcelCancelationNumberStart;
|
||||||
}
|
}
|
||||||
|
public function getRoles(): array
|
||||||
|
{
|
||||||
|
return ['ROLE_API'];
|
||||||
|
}
|
||||||
|
public function eraseCredentials()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public function getUserIdentifier(): string
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -88,6 +88,9 @@ class Order
|
|||||||
protected $deliveryAddressSaved;
|
protected $deliveryAddressSaved;
|
||||||
#[EmbedOne]
|
#[EmbedOne]
|
||||||
protected $senderAddressSaved;
|
protected $senderAddressSaved;
|
||||||
|
|
||||||
|
#[EmbedOne]
|
||||||
|
protected $contactSaved;
|
||||||
/**
|
/**
|
||||||
* @var boolean $withTax
|
* @var boolean $withTax
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -26,34 +26,38 @@ class Payment
|
|||||||
*/
|
*/
|
||||||
#[Id]
|
#[Id]
|
||||||
protected $id;
|
protected $id;
|
||||||
/**
|
/**
|
||||||
* @var string $uid
|
* @var string $uid
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $uid;
|
protected $uid;
|
||||||
/**
|
/**
|
||||||
* @var string $paymentGateway
|
* @var string $paymentGateway
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
protected $paymentGateway;
|
protected $paymentGateway;
|
||||||
/**
|
/**
|
||||||
* @var array $paymentGatewaySettings
|
* @var array $paymentGatewaySettings
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'hash')]
|
#[Field(type: 'hash')]
|
||||||
protected $paymentGatewaySettings;
|
protected $paymentGatewaySettings;
|
||||||
/**
|
/**
|
||||||
* @var array $shippings;
|
* @var array $shippings;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'hash')]
|
#[Field(type: 'hash')]
|
||||||
protected $shippings = [];
|
protected $shippings = [];
|
||||||
|
|
||||||
#[Field(type: 'hash')]
|
#[Field(type: 'hash')]
|
||||||
protected array $countrys = [];
|
protected array $countrys = [];
|
||||||
/**
|
/**
|
||||||
* @var array $pluginSettings;
|
* @var array $pluginSettings;
|
||||||
*/
|
*/
|
||||||
#[Field(type: 'hash')]
|
#[Field(type: 'hash')]
|
||||||
protected $pluginSettings = [];
|
protected $pluginSettings = [];
|
||||||
|
|
||||||
|
#[Field(type: 'string')]
|
||||||
|
protected $paymentTerms;
|
||||||
|
|
||||||
public function __get($name)
|
public function __get($name)
|
||||||
{
|
{
|
||||||
// TODO: Implement __get() method.
|
// TODO: Implement __get() method.
|
||||||
@ -64,6 +68,15 @@ class Payment
|
|||||||
// TODO: Implement __set() method.
|
// TODO: Implement __set() method.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPaymentTerms(): string
|
||||||
|
{
|
||||||
|
return (string)$this->paymentTerms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPaymentTerms(string $var): void
|
||||||
|
{
|
||||||
|
$this->paymentTerms = $var;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -16,6 +16,7 @@ namespace PSC\Shop\EntityBundle\Entity;
|
|||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
use Doctrine\Common\Collections\Collection;
|
use Doctrine\Common\Collections\Collection;
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
use PSC\Shop\ContactBundle\Model\AccountType;
|
||||||
use Ramsey\Uuid\Uuid;
|
use Ramsey\Uuid\Uuid;
|
||||||
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
|
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
|
||||||
use Symfony\Component\Security\Core\User\UserInterface;
|
use Symfony\Component\Security\Core\User\UserInterface;
|
||||||
@ -63,7 +64,7 @@ class Contact implements UserInterface, PasswordAuthenticatedUserInterface, \Ser
|
|||||||
public $layouterEmail;
|
public $layouterEmail;
|
||||||
public $layouterCountryCode;
|
public $layouterCountryCode;
|
||||||
public $layouterCountryName;
|
public $layouterCountryName;
|
||||||
|
public $accountType = AccountType::PERSONAL;
|
||||||
public $showOtherOrders = false;
|
public $showOtherOrders = false;
|
||||||
public $showOtherOrdersAccountFilter;
|
public $showOtherOrdersAccountFilter;
|
||||||
public $showOtherOrdersAccount;
|
public $showOtherOrdersAccount;
|
||||||
|
|||||||
@ -31,11 +31,11 @@ class Payment extends Paymenttype
|
|||||||
protected $shippings = [];
|
protected $shippings = [];
|
||||||
/** @var array */
|
/** @var array */
|
||||||
protected $countrys = [];
|
protected $countrys = [];
|
||||||
/** @var string */
|
protected $paymentTerms;
|
||||||
protected $paymentGateway;
|
protected $paymentGateway;
|
||||||
/** @var array */
|
/** @var array */
|
||||||
protected $paymentGatewaySettings = [];
|
protected $paymentGatewaySettings = [];
|
||||||
/** @var array */
|
/** @var array */
|
||||||
protected $pluginSettings = [];
|
protected $pluginSettings = [];
|
||||||
public function __get($name)
|
public function __get($name)
|
||||||
{
|
{
|
||||||
@ -59,83 +59,83 @@ class Payment extends Paymenttype
|
|||||||
#[ORM\Id]
|
#[ORM\Id]
|
||||||
#[ORM\GeneratedValue(strategy: 'AUTO')]
|
#[ORM\GeneratedValue(strategy: 'AUTO')]
|
||||||
protected $uid;
|
protected $uid;
|
||||||
/**
|
/**
|
||||||
* Titel der Versandart
|
* Titel der Versandart
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[ORM\Column(name: 'title', type: 'string', length: 255)]
|
#[ORM\Column(name: 'title', type: 'string', length: 255)]
|
||||||
protected $title;
|
protected $title;
|
||||||
/**
|
/**
|
||||||
* TrustedShop Name
|
* TrustedShop Name
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[ORM\Column(name: 'trustedshop_name', type: 'string', length: 255)]
|
#[ORM\Column(name: 'trustedshop_name', type: 'string', length: 255)]
|
||||||
protected $trustedShopName;
|
protected $trustedShopName;
|
||||||
/**
|
/**
|
||||||
* Description der Versandart
|
* Description der Versandart
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
#[ORM\Column(name: 'description', type: 'string')]
|
#[ORM\Column(name: 'description', type: 'string')]
|
||||||
protected $description;
|
protected $description;
|
||||||
/**
|
/**
|
||||||
* Einmalige Kosten der Zahlart
|
* Einmalige Kosten der Zahlart
|
||||||
*
|
*
|
||||||
* @var float
|
* @var float
|
||||||
*/
|
*/
|
||||||
#[ORM\Column(name: 'wert', type: 'float')]
|
#[ORM\Column(name: 'wert', type: 'float')]
|
||||||
protected $price;
|
protected $price;
|
||||||
/**
|
/**
|
||||||
* Enable
|
* Enable
|
||||||
*
|
*
|
||||||
* @var boolean
|
* @var boolean
|
||||||
*/
|
*/
|
||||||
#[ORM\Column(name: 'enable', type: 'boolean')]
|
#[ORM\Column(name: 'enable', type: 'boolean')]
|
||||||
protected $enable;
|
protected $enable;
|
||||||
/**
|
/**
|
||||||
* Privat
|
* Privat
|
||||||
*
|
*
|
||||||
* @var boolean
|
* @var boolean
|
||||||
*/
|
*/
|
||||||
#[ORM\Column(name: 'private', type: 'boolean')]
|
#[ORM\Column(name: 'private', type: 'boolean')]
|
||||||
protected $private;
|
protected $private;
|
||||||
/**
|
/**
|
||||||
* Prozentual
|
* Prozentual
|
||||||
*
|
*
|
||||||
* @var boolean
|
* @var boolean
|
||||||
*/
|
*/
|
||||||
#[ORM\Column(name: 'prozent', type: 'boolean')]
|
#[ORM\Column(name: 'prozent', type: 'boolean')]
|
||||||
protected $percent;
|
protected $percent;
|
||||||
/**
|
/**
|
||||||
* Position der Versandart
|
* Position der Versandart
|
||||||
*
|
*
|
||||||
* @var float
|
* @var float
|
||||||
*/
|
*/
|
||||||
#[ORM\Column(name: 'pos', type: 'integer')]
|
#[ORM\Column(name: 'pos', type: 'integer')]
|
||||||
protected $pos;
|
protected $pos;
|
||||||
/**
|
/**
|
||||||
* Shop zu welcher die Versandart gehört
|
* Shop zu welcher die Versandart gehört
|
||||||
*
|
*
|
||||||
* @var int
|
* @var int
|
||||||
*/
|
*/
|
||||||
#[ORM\ManyToOne(targetEntity: 'Shop')]
|
#[ORM\ManyToOne(targetEntity: 'Shop')]
|
||||||
#[ORM\JoinColumn(name: 'shop_id', referencedColumnName: 'id')]
|
#[ORM\JoinColumn(name: 'shop_id', referencedColumnName: 'id')]
|
||||||
protected $shop;
|
protected $shop;
|
||||||
/**
|
/**
|
||||||
* Install
|
* Install
|
||||||
*
|
*
|
||||||
* @var int
|
* @var int
|
||||||
*/
|
*/
|
||||||
#[ORM\ManyToOne(targetEntity: 'Install')]
|
#[ORM\ManyToOne(targetEntity: 'Install')]
|
||||||
#[ORM\JoinColumn(name: 'install_id', referencedColumnName: 'id')]
|
#[ORM\JoinColumn(name: 'install_id', referencedColumnName: 'id')]
|
||||||
protected $install;
|
protected $install;
|
||||||
/**
|
/**
|
||||||
* MWert
|
* MWert
|
||||||
*
|
*
|
||||||
* @var integer
|
* @var integer
|
||||||
*/
|
*/
|
||||||
#[ORM\Column(name: 'mwert', type: 'decimal')]
|
#[ORM\Column(name: 'mwert', type: 'decimal')]
|
||||||
protected $taxClass;
|
protected $taxClass;
|
||||||
|
|
||||||
@ -145,11 +145,11 @@ class Payment extends Paymenttype
|
|||||||
#[ORM\Column(name: 'price_from', type: 'integer')]
|
#[ORM\Column(name: 'price_from', type: 'integer')]
|
||||||
protected int $priceFrom = 0;
|
protected int $priceFrom = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gibt die Id zurück
|
* Gibt die Id zurück
|
||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function getUID()
|
public function getUID()
|
||||||
{
|
{
|
||||||
return $this->uid;
|
return $this->uid;
|
||||||
@ -401,6 +401,16 @@ class Payment extends Paymenttype
|
|||||||
$this->paymentGateway = $paymentGateway;
|
$this->paymentGateway = $paymentGateway;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPaymentTerms(): string
|
||||||
|
{
|
||||||
|
return $this->paymentTerms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPaymentTerms(string $paymentTerms): void
|
||||||
|
{
|
||||||
|
$this->paymentTerms = $paymentTerms;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -57,9 +57,6 @@ abstract class Base
|
|||||||
*/
|
*/
|
||||||
#[\OpenApi\Attributes\Property(ref: new Model(type: \PSC\Shop\ShippingBundle\Model\Shipping::class))]
|
#[\OpenApi\Attributes\Property(ref: new Model(type: \PSC\Shop\ShippingBundle\Model\Shipping::class))]
|
||||||
private Shipping $shipping;
|
private Shipping $shipping;
|
||||||
/**
|
|
||||||
* @var Payment
|
|
||||||
*/
|
|
||||||
#[\OpenApi\Attributes\Property(ref: new Model(type: \PSC\Shop\PaymentBundle\Model\Payment::class))]
|
#[\OpenApi\Attributes\Property(ref: new Model(type: \PSC\Shop\PaymentBundle\Model\Payment::class))]
|
||||||
private $payment;
|
private $payment;
|
||||||
|
|
||||||
@ -395,7 +392,7 @@ abstract class Base
|
|||||||
*/
|
*/
|
||||||
public function getGross()
|
public function getGross()
|
||||||
{
|
{
|
||||||
return $this->gross;
|
return $this->net + $this->vat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -579,7 +576,7 @@ abstract class Base
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$exists) {
|
if (!$exists) {
|
||||||
$tmp[] = $tax;
|
$tmp[] = $tax;
|
||||||
}
|
}
|
||||||
$this->taxes = $tmp;
|
$this->taxes = $tmp;
|
||||||
@ -688,13 +685,23 @@ abstract class Base
|
|||||||
public function getWeight(): int
|
public function getWeight(): int
|
||||||
{
|
{
|
||||||
$sum = 0;
|
$sum = 0;
|
||||||
foreach($this->positions as $position) {
|
foreach ($this->positions as $position) {
|
||||||
$sum += $position->getWeight();
|
$sum += $position->getWeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $sum;
|
return $sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPositionsNet(): int
|
||||||
|
{
|
||||||
|
$sum = 0;
|
||||||
|
foreach ($this->positions as $position) {
|
||||||
|
$sum += $position->getPrice()->getAllNet();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $sum;
|
||||||
|
}
|
||||||
|
|
||||||
public function getShop(): Shop
|
public function getShop(): Shop
|
||||||
{
|
{
|
||||||
return $this->shop;
|
return $this->shop;
|
||||||
|
|||||||
37
src/new/src/PSC/Shop/OrderBundle/Model/Order/Contact.php
Normal file
37
src/new/src/PSC/Shop/OrderBundle/Model/Order/Contact.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Shop\OrderBundle\Model\Order;
|
||||||
|
|
||||||
|
use PSC\Shop\ContactBundle\Model\AccountType;
|
||||||
|
|
||||||
|
class Contact
|
||||||
|
{
|
||||||
|
private string $uuid;
|
||||||
|
|
||||||
|
private AccountType $accountType;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->accountType = AccountType::PERSONAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUuid(): string
|
||||||
|
{
|
||||||
|
return $this->uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setUuid(string $uuid): void
|
||||||
|
{
|
||||||
|
$this->uuid = $uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAccountType(): AccountType
|
||||||
|
{
|
||||||
|
return $this->accountType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAccountType(AccountType $var): void
|
||||||
|
{
|
||||||
|
$this->accountType = $var;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,6 +6,7 @@ use Brick\Money\Money;
|
|||||||
use PSC\Component\ApiBundle\Transformer\Shop;
|
use PSC\Component\ApiBundle\Transformer\Shop;
|
||||||
use PSC\Shop\PaymentBundle\Service\Price;
|
use PSC\Shop\PaymentBundle\Service\Price;
|
||||||
use PSC\Shop\PaymentBundle\Transformer\Payment;
|
use PSC\Shop\PaymentBundle\Transformer\Payment;
|
||||||
|
use PSC\Shop\ProductBundle\Interfaces\ICalcNeedContact;
|
||||||
use PSC\Shop\ShippingBundle\Transformer\Shipping;
|
use PSC\Shop\ShippingBundle\Transformer\Shipping;
|
||||||
use PSC\Shop\VoucherBundle\Service\Calc as CalcVoucher;
|
use PSC\Shop\VoucherBundle\Service\Calc as CalcVoucher;
|
||||||
use PSC\Shop\VoucherBundle\Transformer\Voucher as PSCVoucher;
|
use PSC\Shop\VoucherBundle\Transformer\Voucher as PSCVoucher;
|
||||||
@ -13,8 +14,8 @@ use PSC\System\PluginBundle\Service\ProductType;
|
|||||||
|
|
||||||
class Calc
|
class Calc
|
||||||
{
|
{
|
||||||
|
public function __construct(
|
||||||
public function __construct(private readonly Price $pricePayment,
|
private readonly Price $pricePayment,
|
||||||
private readonly Shop $shopTransformer,
|
private readonly Shop $shopTransformer,
|
||||||
private readonly \PSC\Shop\ShippingBundle\Service\Price $priceShipping,
|
private readonly \PSC\Shop\ShippingBundle\Service\Price $priceShipping,
|
||||||
private readonly ProductType $productTypeRegistry,
|
private readonly ProductType $productTypeRegistry,
|
||||||
@ -30,9 +31,9 @@ class Calc
|
|||||||
public function calcOrder(\PSC\Shop\OrderBundle\Model\Base $order)
|
public function calcOrder(\PSC\Shop\OrderBundle\Model\Base $order)
|
||||||
{
|
{
|
||||||
|
|
||||||
if($order->getShop()->getUuid() != "") {
|
if ($order->getShop()->getUuid() != "") {
|
||||||
$this->shopTransformer->parseModel($order->getShop());
|
$this->shopTransformer->parseModel($order->getShop());
|
||||||
}
|
}
|
||||||
$priceNet = Money::ofMinor(0, 'EUR');
|
$priceNet = Money::ofMinor(0, 'EUR');
|
||||||
$priceVat = Money::ofMinor(0, 'EUR');
|
$priceVat = Money::ofMinor(0, 'EUR');
|
||||||
$priceGross = Money::ofMinor(0, 'EUR');
|
$priceGross = Money::ofMinor(0, 'EUR');
|
||||||
@ -53,11 +54,14 @@ class Calc
|
|||||||
$priceGross = $priceGross->plus(Money::ofMinor($order->getShipping()->getCalcPrice()->gross, 'EUR'));
|
$priceGross = $priceGross->plus(Money::ofMinor($order->getShipping()->getCalcPrice()->gross, 'EUR'));
|
||||||
$order->setShippingCosts(Money::ofMinor($order->getShipping()->getCalcPrice()->net, 'EUR')->getMinorAmount()->toInt());
|
$order->setShippingCosts(Money::ofMinor($order->getShipping()->getCalcPrice()->net, 'EUR')->getMinorAmount()->toInt());
|
||||||
$order->addTax($order->getShipping()->getCalcPrice()->tax);
|
$order->addTax($order->getShipping()->getCalcPrice()->tax);
|
||||||
foreach($order->getPositions() as $position) {
|
foreach ($order->getPositions() as $position) {
|
||||||
$position->getProduct()->setShopUuid($order->getShop()->getUuid());
|
$position->getProduct()->setShopUuid($order->getShop()->getUuid());
|
||||||
if ($this->productTypeRegistry->getProductType($position->getProduct()->getSpecialProductTypeObject()->getTyp())) {
|
if ($this->productTypeRegistry->getProductType($position->getProduct()->getSpecialProductTypeObject()->getTyp())) {
|
||||||
$specialProductTransformer = $this->productTypeRegistry->getProductType($position->getProduct()->getSpecialProductTypeObject()->getTyp())->getProducer();
|
$specialProductTransformer = $this->productTypeRegistry->getProductType($position->getProduct()->getSpecialProductTypeObject()->getTyp())->getProducer();
|
||||||
if($specialProductTransformer) {
|
if ($specialProductTransformer) {
|
||||||
|
if ($specialProductTransformer instanceof ICalcNeedContact) {
|
||||||
|
$specialProductTransformer->setContact($order->getContact());
|
||||||
|
}
|
||||||
$specialProductTransformer->setProduct($position->getProduct());
|
$specialProductTransformer->setProduct($position->getProduct());
|
||||||
$specialProductTransformer->calcPriceForOrderPosition($position);
|
$specialProductTransformer->calcPriceForOrderPosition($position);
|
||||||
}
|
}
|
||||||
@ -73,7 +77,7 @@ class Calc
|
|||||||
$order->setVat($priceVat->getMinorAmount()->toInt());
|
$order->setVat($priceVat->getMinorAmount()->toInt());
|
||||||
$order->setGross($priceGross->getMinorAmount()->toInt());
|
$order->setGross($priceGross->getMinorAmount()->toInt());
|
||||||
$this->voucherTransformer->parseModel($order);
|
$this->voucherTransformer->parseModel($order);
|
||||||
$this->voucherCalcService->calc($order);
|
$this->voucherCalcService->calc($order);
|
||||||
$this->vatCalcService->calcVat($order);
|
$this->vatCalcService->calcVat($order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ use Doctrine\ODM\MongoDB\DocumentManager;
|
|||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use PSC\Shop\ContactBundle\Model\Contact;
|
use PSC\Shop\ContactBundle\Model\Contact;
|
||||||
use PSC\Shop\ContactBundle\Service\Address;
|
use PSC\Shop\ContactBundle\Service\Address;
|
||||||
|
use PSC\Shop\EntityBundle\Entity\Order as PSCOrder;
|
||||||
use PSC\Shop\EntityBundle\Entity\Orderpos;
|
use PSC\Shop\EntityBundle\Entity\Orderpos;
|
||||||
use PSC\Shop\OrderBundle\Model\Base as PSCBase;
|
use PSC\Shop\OrderBundle\Model\Base as PSCBase;
|
||||||
use PSC\Shop\OrderBundle\Transformer\Order\Position;
|
use PSC\Shop\OrderBundle\Transformer\Order\Position;
|
||||||
@ -286,7 +287,7 @@ class Order
|
|||||||
* @param $uuid
|
* @param $uuid
|
||||||
* @return \PSC\Shop\OrderBundle\Model\Order
|
* @return \PSC\Shop\OrderBundle\Model\Order
|
||||||
*/
|
*/
|
||||||
public function getOrderByUuid($uuid, $load_only_order = false)
|
public function getOrderByUuid($uuid, $load_only_order = false): PSCBase
|
||||||
{
|
{
|
||||||
$this->load_only_order = $load_only_order;
|
$this->load_only_order = $load_only_order;
|
||||||
$orderRepo = $this->entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order');
|
$orderRepo = $this->entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order');
|
||||||
|
|||||||
@ -65,8 +65,8 @@ class Order extends Base
|
|||||||
$order->setPaymentRef((string)$orderDoc->getPaymentRef());
|
$order->setPaymentRef((string)$orderDoc->getPaymentRef());
|
||||||
$order->setPaymentGateway((string)$orderDoc->getPaymentGateway());
|
$order->setPaymentGateway((string)$orderDoc->getPaymentGateway());
|
||||||
$order->setTaxes([]);
|
$order->setTaxes([]);
|
||||||
foreach($orderEntity->getMwertAlle() as $row) {
|
foreach ($orderEntity->getMwertAlle() as $row) {
|
||||||
if(isset($row['name'])) {
|
if (isset($row['name'])) {
|
||||||
$order->addTax(new Tax($row['name'], $row['value'], TaxEnum::tryFrom($row['type'])));
|
$order->addTax(new Tax($row['name'], $row['value'], TaxEnum::tryFrom($row['type'])));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -78,10 +78,6 @@ class Order extends Base
|
|||||||
$this->paymentTransformer->fromDb($order->getPayment(), $orderEntity->getPaymentType());
|
$this->paymentTransformer->fromDb($order->getPayment(), $orderEntity->getPaymentType());
|
||||||
$this->shippingTransformer->fromDb($order->getShipping(), $orderEntity->getShippingType());
|
$this->shippingTransformer->fromDb($order->getShipping(), $orderEntity->getShippingType());
|
||||||
|
|
||||||
/**
|
|
||||||
* DOC
|
|
||||||
*/
|
|
||||||
|
|
||||||
$invoice = new \PSC\Shop\ContactBundle\Model\Address();
|
$invoice = new \PSC\Shop\ContactBundle\Model\Address();
|
||||||
if ($orderDoc->getInvoiceAddressSaved() == null) {
|
if ($orderDoc->getInvoiceAddressSaved() == null) {
|
||||||
$this->addressTransformer->fromDb($invoice, new ContactAddress());
|
$this->addressTransformer->fromDb($invoice, new ContactAddress());
|
||||||
@ -111,15 +107,15 @@ class Order extends Base
|
|||||||
$order->setPluginSettings($orderDoc->getPluginSettings());
|
$order->setPluginSettings($orderDoc->getPluginSettings());
|
||||||
$order->setSendDataToShipping($orderDoc->isSendDataToShipping());
|
$order->setSendDataToShipping($orderDoc->isSendDataToShipping());
|
||||||
|
|
||||||
if($orderDoc->getVouchers() != "") {
|
if ($orderDoc->getVouchers() != "") {
|
||||||
$order->setVouchers($this->serializer->deserialize($orderDoc->getVouchers(), Voucher::class.'[]', 'json'));
|
$order->setVouchers($this->serializer->deserialize($orderDoc->getVouchers(), Voucher::class.'[]', 'json'));
|
||||||
}
|
}
|
||||||
if($orderDoc->getDiscounts() != "") {
|
if ($orderDoc->getDiscounts() != "") {
|
||||||
$net = 0;
|
$net = 0;
|
||||||
$gross = 0;
|
$gross = 0;
|
||||||
$vat = 0;
|
$vat = 0;
|
||||||
$order->setDiscounts($this->serializer->deserialize($orderDoc->getDiscounts(), Discount::class.'[]', 'json'));
|
$order->setDiscounts($this->serializer->deserialize($orderDoc->getDiscounts(), Discount::class.'[]', 'json'));
|
||||||
foreach($order->getDiscounts() as $discounts) {
|
foreach ($order->getDiscounts() as $discounts) {
|
||||||
$net += $discounts->getPrice()->getNet();
|
$net += $discounts->getPrice()->getNet();
|
||||||
$vat += $discounts->getPrice()->getVat();
|
$vat += $discounts->getPrice()->getVat();
|
||||||
$gross += $discounts->getPrice()->getGross();
|
$gross += $discounts->getPrice()->getGross();
|
||||||
@ -149,7 +145,7 @@ class Order extends Base
|
|||||||
$orderEntity->setUseAccountAsInvoice(false);
|
$orderEntity->setUseAccountAsInvoice(false);
|
||||||
|
|
||||||
$mwertAlle = [];
|
$mwertAlle = [];
|
||||||
foreach($order->getAllTaxes() as $tax) {
|
foreach ($order->getAllTaxes() as $tax) {
|
||||||
$mwertAlle[] = ['name' => $tax->getName(), 'value' => $tax->getValue(), 'type' => $tax->getType()->value];
|
$mwertAlle[] = ['name' => $tax->getName(), 'value' => $tax->getValue(), 'type' => $tax->getType()->value];
|
||||||
}
|
}
|
||||||
$orderEntity->setMwertAlle(json_encode($mwertAlle));
|
$orderEntity->setMwertAlle(json_encode($mwertAlle));
|
||||||
@ -167,10 +163,6 @@ class Order extends Base
|
|||||||
$this->contactTransformer->toDb($order->getContact(), $orderEntity);
|
$this->contactTransformer->toDb($order->getContact(), $orderEntity);
|
||||||
$this->accountTransformer->toDb($order->getAccount(), $orderEntity);
|
$this->accountTransformer->toDb($order->getAccount(), $orderEntity);
|
||||||
|
|
||||||
/**
|
|
||||||
* DOC
|
|
||||||
*/
|
|
||||||
|
|
||||||
$invoiceDoc = new ContactAddress();
|
$invoiceDoc = new ContactAddress();
|
||||||
$this->addressTransformer->toDb($order->getInvoiceAddress(), $invoiceDoc);
|
$this->addressTransformer->toDb($order->getInvoiceAddress(), $invoiceDoc);
|
||||||
$orderDoc->setInvoiceAddressSaved($invoiceDoc);
|
$orderDoc->setInvoiceAddressSaved($invoiceDoc);
|
||||||
|
|||||||
@ -90,6 +90,7 @@ class PaymentType extends AbstractType
|
|||||||
->add('priceFrom', IntegerType::class, array('label' => 'priceof', 'required' => true, 'empty_data' => 0))
|
->add('priceFrom', IntegerType::class, array('label' => 'priceof', 'required' => true, 'empty_data' => 0))
|
||||||
->add('priceTo', IntegerType::class, array('label' => 'priceuntil', 'required' => true, 'empty_data' => 0))
|
->add('priceTo', IntegerType::class, array('label' => 'priceuntil', 'required' => true, 'empty_data' => 0))
|
||||||
->add('description', TextareaType::class, array('label' => 'description', 'required' => false))
|
->add('description', TextareaType::class, array('label' => 'description', 'required' => false))
|
||||||
|
->add('paymentTerms', TextareaType::class, array('label' => 'paymentTerms', 'required' => false))
|
||||||
->add('trustedShopName', TextType::class, array('label' => 'TrustedShopName', 'required' => false))
|
->add('trustedShopName', TextType::class, array('label' => 'TrustedShopName', 'required' => false))
|
||||||
->add('paymentGateway', ChoiceType::class, array(
|
->add('paymentGateway', ChoiceType::class, array(
|
||||||
'label' => 'PaymentGateway',
|
'label' => 'PaymentGateway',
|
||||||
@ -110,7 +111,7 @@ class PaymentType extends AbstractType
|
|||||||
'multiple' => true,
|
'multiple' => true,
|
||||||
'label' => 'countrys',
|
'label' => 'countrys',
|
||||||
));
|
));
|
||||||
/** @var \PSC\System\PluginBundle\Form\Interfaces\Field $field */
|
/** @var \PSC\System\PluginBundle\Form\Interfaces\Field $field */
|
||||||
foreach ($this->fields->getFields(\PSC\System\PluginBundle\Form\Interfaces\Field::Payment) as $field) {
|
foreach ($this->fields->getFields(\PSC\System\PluginBundle\Form\Interfaces\Field::Payment) as $field) {
|
||||||
$builder->add($field->buildForm($this->formFactory->createNamedBuilder($field->getGroup()), $options));
|
$builder->add($field->buildForm($this->formFactory->createNamedBuilder($field->getGroup()), $options));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
Uid: Uid
|
Uid: Uid
|
||||||
active: Aktiv
|
active: Aktiv
|
||||||
|
paymentTerms: Zahlungsbedingung
|
||||||
|
paymentTermsExample: 'Beispiel: Zahlbar in 14 Tagen bis zum {{ order.created|date_modify("+14 day")|date("d.m.Y") }}'
|
||||||
Pos: Pos
|
Pos: Pos
|
||||||
Name: Name
|
Name: Name
|
||||||
cost: Kosten
|
cost: Kosten
|
||||||
@ -25,4 +27,4 @@ Filter: Filter
|
|||||||
Gateway: Gateway
|
Gateway: Gateway
|
||||||
|
|
||||||
back: Zurück
|
back: Zurück
|
||||||
save: Speichern
|
save: Speichern
|
||||||
|
|||||||
@ -125,6 +125,19 @@
|
|||||||
<label class="col-md-1 form-control-label">{{ form_label(form.description) }}</label>
|
<label class="col-md-1 form-control-label">{{ form_label(form.description) }}</label>
|
||||||
<div class="col-md-11">
|
<div class="col-md-11">
|
||||||
{{ form_widget(form.description) }}
|
{{ form_widget(form.description) }}
|
||||||
|
<p class="text-muted">
|
||||||
|
{{ "paymentTermsExample"|trans}}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-1 form-control-label">{{ form_label(form.paymentTerms) }}</label>
|
||||||
|
<div class="col-md-11">
|
||||||
|
{{ form_widget(form.paymentTerms) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -188,4 +201,4 @@
|
|||||||
</div>
|
</div>
|
||||||
{{ form_end(form) }}
|
{{ form_end(form) }}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@ -129,6 +129,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-1 form-control-label">{{ form_label(form.paymentTerms) }}</label>
|
||||||
|
<div class="col-md-11">
|
||||||
|
{{ form_widget(form.paymentTerms) }}
|
||||||
|
<p class="text-muted">
|
||||||
|
{{ "paymentTermsExample"|trans}}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-pane" id="filter" role="tabpanel">
|
<div class="tab-pane" id="filter" role="tabpanel">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|||||||
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Shop\ProductBundle\Interfaces;
|
||||||
|
|
||||||
|
use PSC\Shop\ContactBundle\Model\Contact;
|
||||||
|
|
||||||
|
interface ICalcNeedContact
|
||||||
|
{
|
||||||
|
public function setContact(Contact $contact): void;
|
||||||
|
}
|
||||||
@ -25,6 +25,8 @@ use Symfony\Component\Console\Output\OutputInterface;
|
|||||||
use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
|
use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
|
||||||
use Symfony\Component\Filesystem\Filesystem;
|
use Symfony\Component\Filesystem\Filesystem;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
|
use Symfony\Component\Lock\LockFactory;
|
||||||
|
use Symfony\Component\Lock\Store\FlockStore;
|
||||||
|
|
||||||
#[AsCommand(name: 'application:queue:do')]
|
#[AsCommand(name: 'application:queue:do')]
|
||||||
class DoCommand extends Command
|
class DoCommand extends Command
|
||||||
@ -80,158 +82,170 @@ class DoCommand extends Command
|
|||||||
protected function execute(InputInterface $input, OutputInterface $output)
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
{
|
{
|
||||||
|
|
||||||
foreach($this->internalQueues as $queue) {
|
|
||||||
$queue->execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
$queues = $this->mongoDb
|
|
||||||
->getRepository('PSC\Shop\EntityBundle\Document\Queue')
|
|
||||||
->findBy(
|
|
||||||
array('eventType' => 'system_plugin_every_run', 'active' => true), [
|
|
||||||
'pos' => 'ASC'
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
$store = new FlockStore();
|
||||||
* @var Queue $queue
|
$factory = new LockFactory($store);
|
||||||
*/
|
|
||||||
foreach ($queues as $queue) {
|
$lock = $factory->createLock('doQueue');
|
||||||
$queueObj = $this->queueRegistry->get($queue->getQueueType());
|
|
||||||
try {
|
if ($lock->acquire()) {
|
||||||
$success = $queueObj->execute(new EveryRun(), $queue);
|
foreach ($this->internalQueues as $queue) {
|
||||||
} catch (\Exception $exception) {
|
$queue->execute();
|
||||||
$this->logService->createLogEntry(new Shop(), LogEntry::ERROR, "Cron", "", $exception->getMessage(), []);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
$this->eventManager->clearManager();
|
|
||||||
/**
|
|
||||||
* @var Job $job
|
|
||||||
*/
|
|
||||||
foreach ($this->eventManager->getAll() as $job) {
|
|
||||||
$canBeRemoved = true;
|
|
||||||
|
|
||||||
$event = $this->eventRegistry->get($job->getEvent());
|
$queues = $this->mongoDb
|
||||||
|
->getRepository('PSC\Shop\EntityBundle\Document\Queue')
|
||||||
|
->findBy(
|
||||||
|
array('eventType' => 'system_plugin_every_run', 'active' => true),
|
||||||
|
[
|
||||||
|
'pos' => 'ASC'
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
if ($event instanceof ClearCache) {
|
/**
|
||||||
$fs = new Filesystem();
|
* @var Queue $queue
|
||||||
//$fs->remove($this->kernel->getCacheDir());
|
*/
|
||||||
} elseif($event instanceof InstallPlugin) {
|
foreach ($queues as $queue) {
|
||||||
$event->setData($job->getData());
|
$queueObj = $this->queueRegistry->get($queue->getQueueType());
|
||||||
$event->setShop($job->getShop());
|
try {
|
||||||
$install = $this->containerService->get($event->getInstallClass());
|
$success = $queueObj->execute(new EveryRun(), $queue);
|
||||||
$install->execute();
|
} catch (\Exception $exception) {
|
||||||
|
$this->logService->createLogEntry(new Shop(), LogEntry::ERROR, "Cron", "", $exception->getMessage(), []);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->eventManager->clearManager();
|
||||||
|
/**
|
||||||
|
* @var Job $job
|
||||||
|
*/
|
||||||
|
foreach ($this->eventManager->getAll() as $job) {
|
||||||
|
$canBeRemoved = true;
|
||||||
|
|
||||||
$plugin = $this->mongoDb
|
$event = $this->eventRegistry->get($job->getEvent());
|
||||||
->getRepository(Plugin::class)
|
|
||||||
->findOneBy(array('id' => (string)$event->getPlugin()));
|
|
||||||
$plugin->setShouldBeInstalled(false);
|
|
||||||
|
|
||||||
$this->mongoDb->persist($plugin);
|
if ($event instanceof ClearCache) {
|
||||||
|
$fs = new Filesystem();
|
||||||
|
//$fs->remove($this->kernel->getCacheDir());
|
||||||
|
} elseif ($event instanceof InstallPlugin) {
|
||||||
|
$event->setData($job->getData());
|
||||||
|
$event->setShop($job->getShop());
|
||||||
|
$install = $this->containerService->get($event->getInstallClass());
|
||||||
|
$install->execute();
|
||||||
|
|
||||||
} elseif($event instanceof DeInstallPlugin) {
|
$plugin = $this->mongoDb
|
||||||
$event->setData($job->getData());
|
->getRepository(Plugin::class)
|
||||||
$event->setShop($job->getShop());
|
->findOneBy(array('id' => (string)$event->getPlugin()));
|
||||||
$deinstall = $this->containerService->get($event->getDeInstallClass());
|
$plugin->setShouldBeInstalled(false);
|
||||||
$deinstall->execute();
|
|
||||||
|
|
||||||
$plugin = $this->mongoDb
|
$this->mongoDb->persist($plugin);
|
||||||
->getRepository(Plugin::class)
|
|
||||||
->findOneBy(array('id' => (string)$event->getPlugin()));
|
|
||||||
$plugin->setInstalled(false);
|
|
||||||
$plugin->setShouldBeDeInstalled(false);
|
|
||||||
|
|
||||||
$this->mongoDb->persist($plugin);
|
} elseif ($event instanceof DeInstallPlugin) {
|
||||||
|
$event->setData($job->getData());
|
||||||
|
$event->setShop($job->getShop());
|
||||||
|
$deinstall = $this->containerService->get($event->getDeInstallClass());
|
||||||
|
$deinstall->execute();
|
||||||
|
|
||||||
} elseif($event instanceof InternalEvent) {
|
$plugin = $this->mongoDb
|
||||||
$event->setData($job->getData());
|
->getRepository(Plugin::class)
|
||||||
$event->setShop($job->getShop());
|
->findOneBy(array('id' => (string)$event->getPlugin()));
|
||||||
} else {
|
$plugin->setInstalled(false);
|
||||||
$event->setData($job->getData());
|
$plugin->setShouldBeDeInstalled(false);
|
||||||
$event->setShop($job->getShop());
|
|
||||||
|
|
||||||
$queues = $this->mongoDb
|
$this->mongoDb->persist($plugin);
|
||||||
->getRepository(Queue::class)
|
|
||||||
->findBy(
|
|
||||||
array(
|
|
||||||
'shop' => $job->getShop(),
|
|
||||||
'active' => true,
|
|
||||||
'eventType' => $job->getEvent()
|
|
||||||
), [
|
|
||||||
'pos' => 'ASC'
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
|
} elseif ($event instanceof InternalEvent) {
|
||||||
|
$event->setData($job->getData());
|
||||||
|
$event->setShop($job->getShop());
|
||||||
|
} else {
|
||||||
|
$event->setData($job->getData());
|
||||||
|
$event->setShop($job->getShop());
|
||||||
|
|
||||||
/**
|
$queues = $this->mongoDb
|
||||||
* @var Queue $queue
|
->getRepository(Queue::class)
|
||||||
*/
|
->findBy(
|
||||||
foreach ($queues as $queue) {
|
array(
|
||||||
if (!$event->doProcess($queue)) {
|
'shop' => $job->getShop(),
|
||||||
continue;
|
'active' => true,
|
||||||
}
|
'eventType' => $job->getEvent()
|
||||||
|
),
|
||||||
|
[
|
||||||
|
'pos' => 'ASC'
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
$queueObj = $this->queueRegistry->get($queue->getQueueType());
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var JobLog $jobLog
|
* @var Queue $queue
|
||||||
*/
|
*/
|
||||||
$jobLog = $this->mongoDb->getRepository(JobLog::class)->findOneBy(
|
foreach ($queues as $queue) {
|
||||||
[
|
if (!$event->doProcess($queue)) {
|
||||||
'job' => $job->getId(),
|
|
||||||
'queue' => $queue->getId()
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($jobLog) {
|
|
||||||
if ($jobLog->getError() == "") {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$jobLog->incCount();
|
|
||||||
|
|
||||||
if ($jobLog->getCount() > 2 && $jobLog->getError() != "") {
|
$queueObj = $this->queueRegistry->get($queue->getQueueType());
|
||||||
$canBeRemoved = false;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$jobLog = new JobLog();
|
|
||||||
$jobLog->setJob($job->getId());
|
|
||||||
$jobLog->setQueue($queue->getId());
|
|
||||||
}
|
|
||||||
$jobLog->setUpdated(new \DateTime());
|
|
||||||
try {
|
|
||||||
$success = $queueObj->execute($event, $queue);
|
|
||||||
|
|
||||||
if (!$success) {
|
/**
|
||||||
$canBeRemoved = false;
|
* @var JobLog $jobLog
|
||||||
$jobLog->setError($queueObj->getError());
|
*/
|
||||||
|
$jobLog = $this->mongoDb->getRepository(JobLog::class)->findOneBy(
|
||||||
|
[
|
||||||
|
'job' => $job->getId(),
|
||||||
|
'queue' => $queue->getId()
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($jobLog) {
|
||||||
|
if ($jobLog->getError() == "") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$jobLog->incCount();
|
||||||
|
|
||||||
|
if ($jobLog->getCount() > 2 && $jobLog->getError() != "") {
|
||||||
|
$canBeRemoved = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$jobLog->setError("");
|
$jobLog = new JobLog();
|
||||||
|
$jobLog->setJob($job->getId());
|
||||||
|
$jobLog->setQueue($queue->getId());
|
||||||
}
|
}
|
||||||
$this->mongoDb->persist($jobLog);
|
$jobLog->setUpdated(new \DateTime());
|
||||||
$this->mongoDb->flush();
|
try {
|
||||||
} catch (\Exception $e) {
|
$success = $queueObj->execute($event, $queue);
|
||||||
$response = $e->getResponse();
|
|
||||||
$message = $response->getContent(false);
|
|
||||||
$jobLog->setError($e->getMessage());
|
|
||||||
$this->mongoDb->persist($jobLog);
|
|
||||||
$this->mongoDb->flush();
|
|
||||||
|
|
||||||
$canBeRemoved = false;
|
if (!$success) {
|
||||||
|
$canBeRemoved = false;
|
||||||
|
$jobLog->setError($queueObj->getError());
|
||||||
|
} else {
|
||||||
|
$jobLog->setError("");
|
||||||
|
}
|
||||||
|
$this->mongoDb->persist($jobLog);
|
||||||
|
$this->mongoDb->flush();
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$response = $e->getResponse();
|
||||||
|
$message = $response->getContent(false);
|
||||||
|
$jobLog->setError($e->getMessage());
|
||||||
|
$this->mongoDb->persist($jobLog);
|
||||||
|
$this->mongoDb->flush();
|
||||||
|
|
||||||
|
$canBeRemoved = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($canBeRemoved) {
|
||||||
|
$this->eventManager->removeJob($job);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($canBeRemoved) {
|
if (count($this->eventManager->getAll()) == 0) {
|
||||||
$this->eventManager->removeJob($job);
|
$this->mongoDb->createQueryBuilder(JobLog::class)->remove()->getQuery()->execute();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count($this->eventManager->getAll()) == 0) {
|
|
||||||
$this->mongoDb->createQueryBuilder(JobLog::class)->remove()->getQuery()->execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
date_default_timezone_set('Europe/Berlin');
|
date_default_timezone_set('Europe/Berlin');
|
||||||
$output->writeln("Successfully ".date('Y-m-d H:i:s'));
|
$output->writeln("Successfully ".date('Y-m-d H:i:s'));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -93,6 +93,8 @@ class ShopSettingsType extends AbstractType
|
|||||||
->add('senderFax', TextType::class, array('required' => false, 'label' => 'Fax'))
|
->add('senderFax', TextType::class, array('required' => false, 'label' => 'Fax'))
|
||||||
->add('senderMobile', TextType::class, array('required' => false, 'label' => 'mobilephonenumber'))
|
->add('senderMobile', TextType::class, array('required' => false, 'label' => 'mobilephonenumber'))
|
||||||
->add('senderEmail', TextType::class, array('required' => false, 'label' => 'EMail'))
|
->add('senderEmail', TextType::class, array('required' => false, 'label' => 'EMail'))
|
||||||
|
->add('senderIban', TextType::class, array('required' => false, 'label' => 'Iban'))
|
||||||
|
->add('senderLId', TextType::class, array('required' => false, 'label' => 'Leitweg Id'))
|
||||||
|
|
||||||
->add('priceFactor', NumberType::class, array('required' => false, 'label' => 'Factor', 'scale' => 5, 'html5' => true,
|
->add('priceFactor', NumberType::class, array('required' => false, 'label' => 'Factor', 'scale' => 5, 'html5' => true,
|
||||||
'attr' => array(
|
'attr' => array(
|
||||||
|
|||||||
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Shop\UserBundle\Security\ApiKey;
|
||||||
|
|
||||||
|
use Doctrine\ODM\MongoDB\DocumentManager;
|
||||||
|
use PSC\Shop\EntityBundle\Document\Instance;
|
||||||
|
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
||||||
|
use Symfony\Component\Security\Core\User\UserInterface;
|
||||||
|
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
|
||||||
|
|
||||||
|
class InstanceProvider implements UserProviderInterface
|
||||||
|
{
|
||||||
|
public function __construct(private DocumentManager $repository)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function refreshUser(UserInterface $user)
|
||||||
|
{
|
||||||
|
if (!$user instanceof Instance) {
|
||||||
|
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user)));
|
||||||
|
}
|
||||||
|
|
||||||
|
$refreshedUser = $this->repository->getRepository(Instance::class)->find($user->getId());
|
||||||
|
|
||||||
|
return $refreshedUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function supportsClass($class)
|
||||||
|
{
|
||||||
|
return Instance::class == $class;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function loadUserByIdentifier(string $identifier): UserInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
$instance = $this->repository
|
||||||
|
->getRepository(\PSC\Shop\EntityBundle\Document\Instance::class)
|
||||||
|
->findOneBy(['supporttoken' => $identifier]);
|
||||||
|
|
||||||
|
if (null === $instance) {
|
||||||
|
|
||||||
|
throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('Instance "%s" not found.', $identifier));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Shop\UserBundle\Security\ApiKey;
|
||||||
|
|
||||||
|
use PSC\Shop\EntityBundle\Entity\Shop;
|
||||||
|
use PSC\Shop\EntityBundle\Repository\ShopRepository;
|
||||||
|
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
||||||
|
use Symfony\Component\Security\Core\User\UserInterface;
|
||||||
|
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
|
||||||
|
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
|
||||||
|
|
||||||
|
class ShopProvider implements UserProviderInterface
|
||||||
|
{
|
||||||
|
public function __construct(private ShopRepository $repository)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function refreshUser(UserInterface $user)
|
||||||
|
{
|
||||||
|
if (!$user instanceof Shop) {
|
||||||
|
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user)));
|
||||||
|
}
|
||||||
|
|
||||||
|
$refreshedUser = $this->repository->find($user->getId());
|
||||||
|
|
||||||
|
return $refreshedUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function supportsClass($class)
|
||||||
|
{
|
||||||
|
return Shop::class == $class;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function loadUserByIdentifier(string $identifier): UserInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
$user = $this->repository->getShopByApiKey($identifier);
|
||||||
|
|
||||||
|
if (null === $user) {
|
||||||
|
|
||||||
|
throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('Shop "%s" not found.', $identifier));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace PSC\Shop\UserBundle\Security;
|
namespace PSC\Shop\UserBundle\Security;
|
||||||
|
|
||||||
|
use Doctrine\ODM\MongoDB\DocumentManager;
|
||||||
use PSC\Shop\EntityBundle\Repository\ShopRepository;
|
use PSC\Shop\EntityBundle\Repository\ShopRepository;
|
||||||
use PSC\Shop\UserBundle\Model\ApiUser;
|
use PSC\Shop\UserBundle\Model\ApiUser;
|
||||||
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
|
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
|
||||||
@ -11,7 +12,8 @@ use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
|
|||||||
class ApiKeyHandler implements AccessTokenHandlerInterface
|
class ApiKeyHandler implements AccessTokenHandlerInterface
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private ShopRepository $repository
|
private ShopRepository $repository,
|
||||||
|
private readonly DocumentManager $documentManager
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,7 +22,17 @@ class ApiKeyHandler implements AccessTokenHandlerInterface
|
|||||||
// e.g. query the "access token" database to search for this token
|
// e.g. query the "access token" database to search for this token
|
||||||
$accessToken = $this->repository->findOneBy(['apiKey' => $apiToken]);
|
$accessToken = $this->repository->findOneBy(['apiKey' => $apiToken]);
|
||||||
if (null === $accessToken) {
|
if (null === $accessToken) {
|
||||||
throw new BadCredentialsException('Invalid credentials.');
|
$instance = $this->documentManager
|
||||||
|
->getRepository(\PSC\Shop\EntityBundle\Document\Instance::class)
|
||||||
|
->findOneBy(['supporttoken' => $apiToken]);
|
||||||
|
|
||||||
|
if (!$instance) {
|
||||||
|
throw new BadCredentialsException('Invalid credentials.');
|
||||||
|
} else {
|
||||||
|
return new UserBadge($instance->getId(), function () use ($instance) {
|
||||||
|
return $instance;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// and return a UserBadge object containing the user identifier from the found token
|
// and return a UserBadge object containing the user identifier from the found token
|
||||||
|
|||||||
@ -1,119 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace PSC\Shop\UserBundle\Security;
|
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
|
||||||
use PSC\Shop\UserBundle\Security\Authentication\Token\pscAppToken;
|
|
||||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
|
||||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
|
||||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
|
||||||
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
|
||||||
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
|
|
||||||
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
|
||||||
use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
|
|
||||||
use Symfony\Component\Security\Core\Exception\InvalidCsrfTokenException;
|
|
||||||
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
|
|
||||||
use Symfony\Component\Security\Core\Security;
|
|
||||||
use Symfony\Component\Security\Core\User\UserInterface;
|
|
||||||
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
|
||||||
use Symfony\Component\Security\Csrf\CsrfToken;
|
|
||||||
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
|
|
||||||
use Symfony\Component\Security\Guard\Authenticator\AbstractFormLoginAuthenticator;
|
|
||||||
use Symfony\Component\Security\Guard\AuthenticatorInterface;
|
|
||||||
use Symfony\Component\Security\Guard\PasswordAuthenticatedInterface;
|
|
||||||
use Symfony\Component\Security\Guard\Token\GuardTokenInterface;
|
|
||||||
use Symfony\Component\Security\Guard\Token\PostAuthenticationGuardToken;
|
|
||||||
use Symfony\Component\Security\Http\Util\TargetPathTrait;
|
|
||||||
|
|
||||||
class Authenticator extends AbstractFormLoginAuthenticator implements PasswordAuthenticatedInterface
|
|
||||||
{
|
|
||||||
use TargetPathTrait;
|
|
||||||
|
|
||||||
private const LOGIN_ROUTE = 'psc_backend_login';
|
|
||||||
private const LOGIN_SUCCESS_ROUTE = 'psc_backend_dashboard_index';
|
|
||||||
|
|
||||||
private $encoder;
|
|
||||||
|
|
||||||
private $entityManager;
|
|
||||||
/**
|
|
||||||
* @var UrlGeneratorInterface
|
|
||||||
*/
|
|
||||||
private $urlGenerator;
|
|
||||||
/**
|
|
||||||
* @var CsrfTokenManagerInterface
|
|
||||||
*/
|
|
||||||
private $csrfTokenManager;
|
|
||||||
/**
|
|
||||||
* @var UserPasswordEncoderInterface
|
|
||||||
*/
|
|
||||||
private $passwordEncoder;
|
|
||||||
|
|
||||||
public function __construct(UserPasswordEncoderInterface $encoder, EntityManagerInterface $entityManager, UrlGeneratorInterface $urlGenerator, CsrfTokenManagerInterface $csrfTokenManager)
|
|
||||||
{
|
|
||||||
$this->encoder = $encoder;
|
|
||||||
$this->entityManager = $entityManager;
|
|
||||||
$this->urlGenerator = $urlGenerator;
|
|
||||||
$this->csrfTokenManager = $csrfTokenManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getLoginUrl()
|
|
||||||
{
|
|
||||||
return $this->urlGenerator->generate(self::LOGIN_ROUTE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function supports(Request $request)
|
|
||||||
{
|
|
||||||
return self::LOGIN_ROUTE === $request->attributes->get('_route')
|
|
||||||
&& $request->isMethod('POST');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCredentials(Request $request)
|
|
||||||
{
|
|
||||||
$credentials = [
|
|
||||||
'username' => $request->request->get('username'),
|
|
||||||
'password' => $request->request->get('password'),
|
|
||||||
'csrf_token' => $request->request->get('_csrf_token'),
|
|
||||||
];
|
|
||||||
$request->getSession()->set(
|
|
||||||
Security::LAST_USERNAME,
|
|
||||||
$credentials['username']
|
|
||||||
);
|
|
||||||
|
|
||||||
return $credentials;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getUser($credentials, UserProviderInterface $userProvider)
|
|
||||||
{
|
|
||||||
$token = new CsrfToken('authenticate', $credentials['csrf_token']);
|
|
||||||
if (!$this->csrfTokenManager->isTokenValid($token)) {
|
|
||||||
throw new InvalidCsrfTokenException();
|
|
||||||
}
|
|
||||||
|
|
||||||
$user = $userProvider->loadUserByUsername($credentials['username']);
|
|
||||||
|
|
||||||
if (!$user) {
|
|
||||||
// fail authentication with a custom error
|
|
||||||
throw new CustomUserMessageAuthenticationException('User could not be found.');
|
|
||||||
}
|
|
||||||
$_SESSION['Zend_Auth']['storage']['self_email'] = $user->getUsername();
|
|
||||||
$_SESSION['Zend_Auth']['storage']['id'] = $user->getId();
|
|
||||||
return $user;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function checkCredentials($credentials, UserInterface $user)
|
|
||||||
{
|
|
||||||
return password_verify($credentials['password'], $user->getPassword());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
|
|
||||||
{
|
|
||||||
return new RedirectResponse(self::LOGIN_SUCCESS_ROUTE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getPassword($credentials): ?string
|
|
||||||
{
|
|
||||||
return $credentials['password'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,137 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace PSC\Shop\UserBundle\Security;
|
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
|
||||||
use PSC\Shop\EntityBundle\Entity\Contact;
|
|
||||||
use PSC\Shop\UserBundle\PSCShopUserBundle;
|
|
||||||
use PSC\System\SettingsBundle\Document\LogEntry;
|
|
||||||
use PSC\System\SettingsBundle\Service\Log;
|
|
||||||
use PSC\System\SettingsBundle\Service\Shop;
|
|
||||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
|
||||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
|
||||||
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
|
|
||||||
use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
|
|
||||||
use Symfony\Component\Security\Core\Exception\InvalidCsrfTokenException;
|
|
||||||
use Symfony\Component\Security\Core\Security;
|
|
||||||
use Symfony\Component\Security\Core\User\UserInterface;
|
|
||||||
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
|
||||||
use Symfony\Component\Security\Csrf\CsrfToken;
|
|
||||||
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
|
|
||||||
use Symfony\Component\Security\Guard\Authenticator\AbstractFormLoginAuthenticator;
|
|
||||||
use Symfony\Component\Security\Guard\PasswordAuthenticatedInterface;
|
|
||||||
use Symfony\Component\Security\Http\Util\TargetPathTrait;
|
|
||||||
|
|
||||||
class LoginFormAuthenticator extends AbstractFormLoginAuthenticator implements PasswordAuthenticatedInterface
|
|
||||||
{
|
|
||||||
use TargetPathTrait;
|
|
||||||
|
|
||||||
public const LOGIN_ROUTE = 'psc_backend_login';
|
|
||||||
private const LOGIN_SUCCESS_ROUTE = 'psc_backend_dashboard_index';
|
|
||||||
|
|
||||||
private $entityManager;
|
|
||||||
private $urlGenerator;
|
|
||||||
private $csrfTokenManager;
|
|
||||||
private $passwordEncoder;
|
|
||||||
private $shopService;
|
|
||||||
/**
|
|
||||||
* @var Log
|
|
||||||
*/
|
|
||||||
private Log $logService;
|
|
||||||
|
|
||||||
public function __construct(
|
|
||||||
EntityManagerInterface $entityManager,
|
|
||||||
UrlGeneratorInterface $urlGenerator,
|
|
||||||
CsrfTokenManagerInterface $csrfTokenManager,
|
|
||||||
UserPasswordEncoderInterface $passwordEncoder,
|
|
||||||
Shop $shopService,
|
|
||||||
Log $logService
|
|
||||||
) {
|
|
||||||
$this->entityManager = $entityManager;
|
|
||||||
$this->urlGenerator = $urlGenerator;
|
|
||||||
$this->csrfTokenManager = $csrfTokenManager;
|
|
||||||
$this->passwordEncoder = $passwordEncoder;
|
|
||||||
$this->shopService = $shopService;
|
|
||||||
$this->logService = $logService;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function supports(Request $request)
|
|
||||||
{
|
|
||||||
return self::LOGIN_ROUTE === $request->attributes->get('_route')
|
|
||||||
&& $request->isMethod('POST');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCredentials(Request $request)
|
|
||||||
{
|
|
||||||
$credentials = [
|
|
||||||
'username' => $request->request->get('username'),
|
|
||||||
'password' => $request->request->get('password'),
|
|
||||||
'csrf_token' => $request->request->get('_csrf_token'),
|
|
||||||
];
|
|
||||||
$request->getSession()->set(
|
|
||||||
Security::LAST_USERNAME,
|
|
||||||
$credentials['username']
|
|
||||||
);
|
|
||||||
|
|
||||||
return $credentials;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getUser($credentials, UserProviderInterface $userProvider)
|
|
||||||
{
|
|
||||||
$token = new CsrfToken('authenticate', $credentials['csrf_token']);
|
|
||||||
if (!$this->csrfTokenManager->isTokenValid($token)) {
|
|
||||||
throw new InvalidCsrfTokenException();
|
|
||||||
}
|
|
||||||
|
|
||||||
$shop = $this->shopService->getShopByDomain();
|
|
||||||
|
|
||||||
$user = $this->entityManager
|
|
||||||
->getRepository(Contact::class)
|
|
||||||
->getContactByEmailAndShop($credentials['username'], $shop->getUid());
|
|
||||||
|
|
||||||
if (!$user) {
|
|
||||||
// fail authentication with a custom error
|
|
||||||
throw new CustomUserMessageAuthenticationException('Email could not be found.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$user = $user->getContact();
|
|
||||||
|
|
||||||
return $user;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function checkCredentials($credentials, UserInterface $user)
|
|
||||||
{
|
|
||||||
$auth = password_verify($credentials['password'], $user->getPassword());
|
|
||||||
|
|
||||||
if ($auth) {
|
|
||||||
$this->logService->createLogEntry($this->shopService->getShopByDomain(), new Contact(), LogEntry::INFO, PSCShopUserBundle::class, $credentials['username'], 'Login Successful');
|
|
||||||
} else {
|
|
||||||
$this->logService->createLogEntry($this->shopService->getShopByDomain(), new Contact(), LogEntry::INFO, PSCShopUserBundle::class, $credentials['username'], 'Login Failure');
|
|
||||||
}
|
|
||||||
return $auth;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used to upgrade (rehash) the user's password automatically over time.
|
|
||||||
*/
|
|
||||||
public function getPassword($credentials): ?string
|
|
||||||
{
|
|
||||||
return $credentials['password'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
|
|
||||||
{
|
|
||||||
if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
|
|
||||||
return new RedirectResponse($targetPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new RedirectResponse($this->urlGenerator->generate(self::LOGIN_SUCCESS_ROUTE));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getLoginUrl()
|
|
||||||
{
|
|
||||||
return $this->urlGenerator->generate(self::LOGIN_ROUTE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,146 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PrintshopCreator Suite
|
|
||||||
*
|
|
||||||
* PHP Version 5.3
|
|
||||||
*
|
|
||||||
* @author Thomas Peterson <info@thomas-peterson.de>
|
|
||||||
* @copyright 2012-2013 PrintshopCreator GmbH
|
|
||||||
* @license Private
|
|
||||||
* @link http://www.printshopcreator.de
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace PSC\Shop\UserBundle\Security\User;
|
|
||||||
|
|
||||||
use Doctrine\Bundle\DoctrineBundle\Registry;
|
|
||||||
use PSC\Shop\UserBundle\Model\ApiUser;
|
|
||||||
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
|
||||||
use Symfony\Component\Security\Core\User\UserInterface;
|
|
||||||
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
|
|
||||||
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
|
|
||||||
|
|
||||||
class Provider implements UserProviderInterface
|
|
||||||
{
|
|
||||||
private $class;
|
|
||||||
private $repository;
|
|
||||||
private $property;
|
|
||||||
private $metadata;
|
|
||||||
public function __construct(Registry $registry, $class, $property = null, $managerName = null)
|
|
||||||
{
|
|
||||||
$em = $registry->getManager($managerName);
|
|
||||||
$this->class = $class;
|
|
||||||
$this->metadata = $em->getClassMetadata($class);
|
|
||||||
if (false !== strpos($this->class, ':')) {
|
|
||||||
$this->class = $this->metadata->getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->repository = $em->getRepository($class);
|
|
||||||
$this->property = $property;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function loadUserByUsername($username)
|
|
||||||
{
|
|
||||||
if (null !== $this->property) {
|
|
||||||
$user = $this->repository->findOneBy(array($this->property => $username));
|
|
||||||
} else {
|
|
||||||
if (!$this->repository instanceof UserProviderInterface) {
|
|
||||||
throw new \InvalidArgumentException(sprintf('The Doctrine repository "%s" must implement UserProviderInterface.', get_class($this->repository)));
|
|
||||||
}
|
|
||||||
|
|
||||||
$user = $this->repository->loadUserByUsername($username);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null === $user) {
|
|
||||||
throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('User "%s" not found.', $username));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $user;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public function refreshUser(UserInterface $user)
|
|
||||||
{
|
|
||||||
if (!$user instanceof $this->class) {
|
|
||||||
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->repository instanceof UserProviderInterface) {
|
|
||||||
$refreshedUser = $this->repository->refreshUser($user);
|
|
||||||
} else {
|
|
||||||
// The user must be reloaded via the primary key as all other data
|
|
||||||
// might have changed without proper persistence in the database.
|
|
||||||
// That's the case when the user has been changed by a form with
|
|
||||||
// validation errors.
|
|
||||||
if (!$id = $this->metadata->getIdentifierValues($user)) {
|
|
||||||
throw new \InvalidArgumentException("You cannot refresh a user " .
|
|
||||||
"from the EntityUserProvider that does not contain an identifier. " .
|
|
||||||
"The user object has to be serialized with its own identifier " .
|
|
||||||
"mapped by Doctrine.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null === $refreshedUser = $this->repository->find($id)) {
|
|
||||||
throw new UsernameNotFoundException(sprintf('User with id %s not found', json_encode($id)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $refreshedUser;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public function supportsClass($class)
|
|
||||||
{
|
|
||||||
return $class === $this->class || is_subclass_of($class, $this->class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function loadUserByUId($id)
|
|
||||||
{
|
|
||||||
if (null !== $this->property) {
|
|
||||||
$user = $this->repository->findOneBy(array('uid' => $id));
|
|
||||||
} else {
|
|
||||||
if (!$this->repository instanceof UserProviderInterface) {
|
|
||||||
throw new \InvalidArgumentException(sprintf('The Doctrine repository "%s" must implement UserProviderInterface.', get_class($this->repository)));
|
|
||||||
}
|
|
||||||
|
|
||||||
$user = $this->repository->loadUserByUid($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null === $user) {
|
|
||||||
throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('User "%s" not found.', $id));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $user;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function mySelectedShop($contact)
|
|
||||||
{
|
|
||||||
return $this->repository->mySelectedShop($contact);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function loadUserByIdentifier(string $identifier): UserInterface
|
|
||||||
{
|
|
||||||
if (null !== $this->property) {
|
|
||||||
$user = $this->repository->findOneBy(array('username' => $identifier));
|
|
||||||
} else {
|
|
||||||
if (!$this->repository instanceof UserProviderInterface) {
|
|
||||||
throw new \InvalidArgumentException(sprintf('The Doctrine repository "%s" must implement UserProviderInterface.', get_class($this->repository)));
|
|
||||||
}
|
|
||||||
|
|
||||||
$user = $this->repository->loadUserByUid($identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null === $user) {
|
|
||||||
|
|
||||||
throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('User "%s" not found.', $identifier));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $user;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Shop\UserBundle\Security\User;
|
||||||
|
|
||||||
|
use PSC\Shop\ContactBundle\Repository\ContactRepository;
|
||||||
|
use PSC\Shop\EntityBundle\Entity\Contact;
|
||||||
|
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
||||||
|
use Symfony\Component\Security\Core\User\UserInterface;
|
||||||
|
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
|
||||||
|
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
|
||||||
|
|
||||||
|
class UserProvider implements UserProviderInterface
|
||||||
|
{
|
||||||
|
public function __construct(private ContactRepository $repository)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function refreshUser(UserInterface $user)
|
||||||
|
{
|
||||||
|
if (!$user instanceof Contact) {
|
||||||
|
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user)));
|
||||||
|
}
|
||||||
|
|
||||||
|
$refreshedUser = $this->repository->find($user->getId());
|
||||||
|
|
||||||
|
return $refreshedUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function supportsClass($class)
|
||||||
|
{
|
||||||
|
return Contact::class == $class || is_subclass_of($class, Contact::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function mySelectedShop($contact)
|
||||||
|
{
|
||||||
|
return $this->repository->mySelectedShop($contact);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function loadUserByIdentifier(string $identifier): UserInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
$user = $this->repository->loadUserByUsername($identifier);
|
||||||
|
|
||||||
|
if (null === $user) {
|
||||||
|
|
||||||
|
throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('User "%s" not found.', $identifier));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -25,7 +25,7 @@ class HelpController extends AbstractController
|
|||||||
|
|
||||||
$helpItems = $documentManager
|
$helpItems = $documentManager
|
||||||
->getRepository(Help::class)
|
->getRepository(Help::class)
|
||||||
->findAll();
|
->findBy([], ['name' => 'ASC']);
|
||||||
return array(
|
return array(
|
||||||
'helpItems' => $helpItems
|
'helpItems' => $helpItems
|
||||||
);
|
);
|
||||||
|
|||||||
@ -13,12 +13,16 @@ class Help
|
|||||||
$this->mongoManager = $mongoManager;
|
$this->mongoManager = $mongoManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getHelp(string $name): ?\PSC\System\SettingsBundle\Model\Help
|
public function getHelp(string $id, string $name): ?\PSC\System\SettingsBundle\Model\Help
|
||||||
{
|
{
|
||||||
/** @var \PSC\System\SettingsBundle\Document\Help $doc */
|
/** @var \PSC\System\SettingsBundle\Document\Help $doc */
|
||||||
$doc = $this->mongoManager->getRepository(\PSC\System\SettingsBundle\Document\Help::class)->findOneBy(['name' => $name]);
|
$doc = $this->mongoManager->getRepository(\PSC\System\SettingsBundle\Document\Help::class)->findOneBy(['name' => sprintf("%s_%s", $id, $name)]);
|
||||||
if(null === $doc) {
|
|
||||||
return null;
|
if (null === $doc) {
|
||||||
|
$doc = $this->mongoManager->getRepository(\PSC\System\SettingsBundle\Document\Help::class)->findOneBy(['name' => $name]);
|
||||||
|
if ($doc === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return new \PSC\System\SettingsBundle\Model\Help($doc->id, $doc->name, $doc->helpText);
|
return new \PSC\System\SettingsBundle\Model\Help($doc->id, $doc->name, $doc->helpText);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,6 +16,7 @@ use Twig\Environment;
|
|||||||
use horstoeko\zugferd\ZugferdDocumentBuilder;
|
use horstoeko\zugferd\ZugferdDocumentBuilder;
|
||||||
use horstoeko\zugferd\ZugferdDocumentPdfMerger;
|
use horstoeko\zugferd\ZugferdDocumentPdfMerger;
|
||||||
use horstoeko\zugferd\ZugferdProfiles;
|
use horstoeko\zugferd\ZugferdProfiles;
|
||||||
|
use horstoeko\zugferd\codelists\ZugferdPaymentMeans;
|
||||||
|
|
||||||
require_once __DIR__ . '/../../../Shop/EntityBundle/Lagacy/TP_Basket_Item.php';
|
require_once __DIR__ . '/../../../Shop/EntityBundle/Lagacy/TP_Basket_Item.php';
|
||||||
/**
|
/**
|
||||||
@ -67,35 +68,47 @@ class Printing
|
|||||||
public function generateXRechnung(\PSC\Shop\EntityBundle\Entity\Order $order): string
|
public function generateXRechnung(\PSC\Shop\EntityBundle\Entity\Order $order): string
|
||||||
{
|
{
|
||||||
$orderModel = $this->orderService->getOrderByUuid($order->getUuid());
|
$orderModel = $this->orderService->getOrderByUuid($order->getUuid());
|
||||||
$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_3);
|
$document = ZugferdDocumentBuilder::createNew(ZugferdProfiles::PROFILE_XRECHNUNG_3);
|
||||||
|
|
||||||
$document
|
$document
|
||||||
->setDocumentInformation($orderModel->getAlias(), "380", $orderModel->getCreated(), "EUR")
|
->setDocumentInformation($orderModel->getAlias(), "380", $orderModel->getCreated(), "EUR")
|
||||||
->addDocumentNote('Rechnung gemäß Bestellung vom ' . $orderModel->getCreated()->format('d.m.Y'))
|
->addDocumentNote('Rechnung gemäß Bestellung vom ' . $orderModel->getCreated()->format('d.m.Y'))
|
||||||
->setDocumentSupplyChainEvent($orderModel->getCreated())
|
->setDocumentSupplyChainEvent($orderModel->getCreated())
|
||||||
->setDocumentSeller($orderModel->getSenderAddress()->getCompany() . ' ' . $orderModel->getSenderAddress()->getFirstname() . ' ' . $orderModel->getSenderAddress()->getLastname(), "549910")
|
->setDocumentBuyerReference("leitwegId")
|
||||||
->setDocumentSellerAddress($orderModel->getSenderAddress()->getStreet() . ' ' . $orderModel->getSenderAddress()->getHouseNumber(), "", "", $orderModel->getSenderAddress()->getZip(), $orderModel->getSenderAddress()->getCity(), $orderModel->getSenderAddress()->getCountry())
|
// ->addDocumentSellerGlobalId("4000001123452", "0088")
|
||||||
|
->setDocumentSeller($orderModel->getSenderAddress()->getCompany() . ' ' . $orderModel->getSenderAddress()->getFirstname() . ' ' . $orderModel->getSenderAddress()->getLastname(), "")
|
||||||
|
->setDocumentSellerAddress($orderModel->getSenderAddress()->getStreet() . ' ' . $orderModel->getSenderAddress()->getHouseNumber(), "", "", $orderModel->getSenderAddress()->getZip(), $orderModel->getSenderAddress()->getCity(), $orderModel->getSenderAddress()->getCountry() ?? 'DE')
|
||||||
|
->setDocumentSellerContact($orderModel->getSenderAddress()->getFirstname() . ' ' . $orderModel->getSenderAddress()->getLastname(), $orderModel->getSenderAddress()->getCompany(), $orderModel->getSenderAddress()->getPhone(), $orderModel->getSenderAddress()->getMobilPhone(), $orderModel->getSenderAddress()->getEmail())
|
||||||
|
->setDocumentSellerCommunication("EM", $orderModel->getSenderAddress()->getEmail())
|
||||||
->setDocumentBuyer($orderModel->getInvoiceAddress()->getCompany() . ' ' . $orderModel->getInvoiceAddress()->getFirstname() . ' ' . $orderModel->getInvoiceAddress()->getLastname(), $orderModel->getInvoiceAddress()->getKundenNr())
|
->setDocumentBuyer($orderModel->getInvoiceAddress()->getCompany() . ' ' . $orderModel->getInvoiceAddress()->getFirstname() . ' ' . $orderModel->getInvoiceAddress()->getLastname(), $orderModel->getInvoiceAddress()->getKundenNr())
|
||||||
->setDocumentBuyerAddress($orderModel->getInvoiceAddress()->getStreet() . ' ' . $orderModel->getInvoiceAddress()->getHouseNumber(), "", "", $orderModel->getInvoiceAddress()->getZip(), $orderModel->getInvoiceAddress()->getCity(), $orderModel->getInvoiceAddress()->getCountry());
|
->setDocumentBuyerAddress($orderModel->getInvoiceAddress()->getStreet() . ' ' . $orderModel->getInvoiceAddress()->getHouseNumber(), "", "", $orderModel->getInvoiceAddress()->getZip(), $orderModel->getInvoiceAddress()->getCity(), $orderModel->getInvoiceAddress()->getCountry() ?? 'DE')
|
||||||
|
->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null)
|
||||||
|
->addDocumentPaymentTermXRechnung("Zahlungsbedingungen", [], [], [], null, null)
|
||||||
|
|
||||||
foreach($orderModel->getTaxes() as $tax) {
|
->addDocumentSellerVATRegistrationNumber("DEumsatzsteuer")
|
||||||
|
->addDocumentSellerTaxNumber("steuernummer")
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
foreach ($orderModel->getTaxes() as $tax) {
|
||||||
$document->addDocumentTax("S", "VAT", $tax->getValue() / 100, $tax->getValue() / 100, $tax->getName() / 100);
|
$document->addDocumentTax("S", "VAT", $tax->getValue() / 100, $tax->getValue() / 100, $tax->getName() / 100);
|
||||||
}
|
}
|
||||||
$document
|
$document
|
||||||
->setDocumentSummation($orderModel->getGross() / 100, $orderModel->getGross() / 100, $orderModel->getNet() / 100, 0.0, 0.0, $orderModel->getNet() / 100, $orderModel->getTaxesSum() / 100, null, 0.0);
|
|
||||||
|
|
||||||
foreach($orderModel->getPositions() as $position) {
|
->setDocumentSummation($orderModel->getGross() / 100, $orderModel->getGross() / 100, $orderModel->getPositionsNet() / 100, 20, 0.0, $orderModel->getNet() / 100, $orderModel->getTaxesSum() / 100, null, 0.0);
|
||||||
|
|
||||||
|
foreach ($orderModel->getPositions() as $position) {
|
||||||
$document
|
$document
|
||||||
->addNewPosition($position->getPos())
|
->addNewPosition($position->getPos())
|
||||||
->setDocumentPositionProductDetails($position->getProduct()->getTitle())
|
->setDocumentPositionProductDetails($position->getProduct()->getTitle())
|
||||||
->setDocumentPositionGrossPrice($position->getPrice()->getGross() / 100)
|
// ->setDocumentPositionGrossPrice($position->getPrice()->getGross() / 100)
|
||||||
->setDocumentPositionNetPrice($position->getPrice()->getNet() / 100)
|
->setDocumentPositionNetPrice($position->getPrice()->getNet() / 100)
|
||||||
->setDocumentPositionQuantity(1, "H87")
|
->setDocumentPositionQuantity(1, "H87")
|
||||||
->addDocumentPositionTax('S', 'VAT', $position->getPrice()->getTax()->getName() / 100)
|
->addDocumentPositionTax('S', 'VAT', $position->getPrice()->getTax()->getName() / 100)
|
||||||
->setDocumentPositionLineSummation($position->getPrice()->getNet() / 100)
|
->setDocumentPositionLineSummation($position->getPrice()->getNet() / 100)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
$document
|
||||||
|
->addDocumentLogisticsServiceCharge("Shippingcost", 20, ['VAT'], [19]);
|
||||||
return $document->getContent();
|
return $document->getContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,26 +237,26 @@ class Printing
|
|||||||
$this->mpdf->WriteHTML($html);
|
$this->mpdf->WriteHTML($html);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($addXRechnung) {
|
if ($addXRechnung) {
|
||||||
$orderModel = $this->orderService->getOrderByUuid($order->getUuid());
|
$orderModel = $this->orderService->getOrderByUuid($order->getUuid());
|
||||||
$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_2);
|
$document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_3);
|
||||||
|
|
||||||
$document
|
$document
|
||||||
->setDocumentInformation($orderModel->getAlias(), "380", $orderModel->getCreated(), "EUR")
|
->setDocumentInformation($orderModel->getAlias(), "380", $orderModel->getCreated(), "EUR")
|
||||||
->addDocumentNote('Rechnung gemäß Bestellung vom ' . $orderModel->getCreated()->format('d.m.Y'))
|
->addDocumentNote('Rechnung gemäß Bestellung vom ' . $orderModel->getCreated()->format('d.m.Y'))
|
||||||
->setDocumentSupplyChainEvent($orderModel->getCreated())
|
->setDocumentSupplyChainEvent($orderModel->getCreated())
|
||||||
->setDocumentSeller($orderModel->getSenderAddress()->getCompany() . ' ' . $orderModel->getSenderAddress()->getFirstname() . ' ' . $orderModel->getSenderAddress()->getLastname(), "549910")
|
->setDocumentSeller($orderModel->getSenderAddress()->getCompany() . ' ' . $orderModel->getSenderAddress()->getFirstname() . ' ' . $orderModel->getSenderAddress()->getLastname(), "549910")
|
||||||
->setDocumentSellerAddress($orderModel->getSenderAddress()->getStreet() . ' ' . $orderModel->getSenderAddress()->getHouseNumber(), "", "", $orderModel->getSenderAddress()->getZip(), $orderModel->getSenderAddress()->getCity(), $orderModel->getSenderAddress()->getCountry())
|
->setDocumentSellerAddress($orderModel->getSenderAddress()->getStreet() . ' ' . $orderModel->getSenderAddress()->getHouseNumber(), "", "", $orderModel->getSenderAddress()->getZip(), $orderModel->getSenderAddress()->getCity(), $orderModel->getSenderAddress()->getCountry() ?? 'DE')
|
||||||
->setDocumentBuyer($orderModel->getInvoiceAddress()->getCompany() . ' ' . $orderModel->getInvoiceAddress()->getFirstname() . ' ' . $orderModel->getInvoiceAddress()->getLastname(), $orderModel->getInvoiceAddress()->getKundenNr())
|
->setDocumentBuyer($orderModel->getInvoiceAddress()->getCompany() . ' ' . $orderModel->getInvoiceAddress()->getFirstname() . ' ' . $orderModel->getInvoiceAddress()->getLastname(), $orderModel->getInvoiceAddress()->getKundenNr())
|
||||||
->setDocumentBuyerAddress($orderModel->getInvoiceAddress()->getStreet() . ' ' . $orderModel->getInvoiceAddress()->getHouseNumber(), "", "", $orderModel->getInvoiceAddress()->getZip(), $orderModel->getInvoiceAddress()->getCity(), $orderModel->getInvoiceAddress()->getCountry());
|
->setDocumentBuyerAddress($orderModel->getInvoiceAddress()->getStreet() . ' ' . $orderModel->getInvoiceAddress()->getHouseNumber(), "", "", $orderModel->getInvoiceAddress()->getZip(), $orderModel->getInvoiceAddress()->getCity(), $orderModel->getInvoiceAddress()->getCountry() ?? 'DE');
|
||||||
|
|
||||||
foreach($orderModel->getTaxes() as $tax) {
|
foreach ($orderModel->getTaxes() as $tax) {
|
||||||
$document->addDocumentTax("S", "VAT", $tax->getValue() / 100, $tax->getValue() / 100, $tax->getName() / 100);
|
$document->addDocumentTax("S", "VAT", $tax->getValue() / 100, $tax->getValue() / 100, $tax->getName() / 100);
|
||||||
}
|
}
|
||||||
$document
|
$document
|
||||||
->setDocumentSummation($orderModel->getGross() / 100, $orderModel->getGross() / 100, $orderModel->getNet() / 100, 0.0, 0.0, $orderModel->getNet() / 100, $orderModel->getTaxesSum() / 100, null, 0.0);
|
->setDocumentSummation($orderModel->getGross() / 100, $orderModel->getGross() / 100, $orderModel->getNet() / 100, 0.0, 0.0, $orderModel->getNet() / 100, $orderModel->getTaxesSum() / 100, null, 0.0);
|
||||||
|
|
||||||
foreach($orderModel->getPositions() as $position) {
|
foreach ($orderModel->getPositions() as $position) {
|
||||||
$document
|
$document
|
||||||
->addNewPosition($position->getPos())
|
->addNewPosition($position->getPos())
|
||||||
->setDocumentPositionProductDetails($position->getProduct()->getTitle())
|
->setDocumentPositionProductDetails($position->getProduct()->getTitle())
|
||||||
|
|||||||
@ -188,19 +188,19 @@ class TemplateVars
|
|||||||
$engine->setParameters($shop->getParameter());
|
$engine->setParameters($shop->getParameter());
|
||||||
|
|
||||||
$tmpDiscounts = [];
|
$tmpDiscounts = [];
|
||||||
if(isset($objDoc->getSpecialProductTypeObject()['params'])) {
|
if (isset($objDoc->getSpecialProductTypeObject()['params'])) {
|
||||||
$engine->setVariables($objDoc->getSpecialProductTypeObject()['params']);
|
$engine->setVariables($objDoc->getSpecialProductTypeObject()['params']);
|
||||||
$engine->setSavedCalcReferences($objDoc->getCalcReferences());
|
$engine->setSavedCalcReferences($objDoc->getCalcReferences());
|
||||||
if(isset($objDoc->getSpecialProductTypeObject()['kalk_artikel'])) {
|
if (isset($objDoc->getSpecialProductTypeObject()['kalk_artikel'])) {
|
||||||
$engine->setActiveArticle($objDoc->getSpecialProductTypeObject()['kalk_artikel']);
|
$engine->setActiveArticle($objDoc->getSpecialProductTypeObject()['kalk_artikel']);
|
||||||
}
|
}
|
||||||
$engine->calc();
|
$engine->calc();
|
||||||
} else {
|
} else {
|
||||||
$engine->setVariables($objPosition->getOptions());
|
$engine->setVariables($objPosition->getOptions());
|
||||||
if(isset($objPosition->getOptions()['kalk_artikel'])) {
|
if (isset($objPosition->getOptions()['kalk_artikel'])) {
|
||||||
$engine->setActiveArticle($objPosition->getOptions()['kalk_artikel']);
|
$engine->setActiveArticle($objPosition->getOptions()['kalk_artikel']);
|
||||||
}
|
}
|
||||||
if($objPosition->getXmlProduct() != "") {
|
if ($objPosition->getXmlProduct() != "") {
|
||||||
$engine->setActiveArticle($objPosition->getXmlProduct());
|
$engine->setActiveArticle($objPosition->getXmlProduct());
|
||||||
}
|
}
|
||||||
$engine->calc();
|
$engine->calc();
|
||||||
@ -210,7 +210,7 @@ class TemplateVars
|
|||||||
$articleCalc = $engine->getArticle();
|
$articleCalc = $engine->getArticle();
|
||||||
|
|
||||||
$count = $pos->getCount();
|
$count = $pos->getCount();
|
||||||
if($auflage = $articleCalc->getOptionById('auflage')) {
|
if ($auflage = $articleCalc->getOptionById('auflage')) {
|
||||||
$count = $auflage->getRawValue();
|
$count = $auflage->getRawValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,11 +258,11 @@ class TemplateVars
|
|||||||
foreach ($setConfig as $conf) {
|
foreach ($setConfig as $conf) {
|
||||||
/** @var Product $product */
|
/** @var Product $product */
|
||||||
$product = $productRepo->findOneBy(['uid' => $conf->article_id]);
|
$product = $productRepo->findOneBy(['uid' => $conf->article_id]);
|
||||||
if(!$product) {
|
if (!$product) {
|
||||||
$product = $productRepo->findOneBy(['uuid' => $conf->article_id]);
|
$product = $productRepo->findOneBy(['uuid' => $conf->article_id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($product) {
|
if ($product) {
|
||||||
if (isset($setConfig[$product->getId()])) {
|
if (isset($setConfig[$product->getId()])) {
|
||||||
$productSets[] = [
|
$productSets[] = [
|
||||||
'title' => $product->getTitle(),
|
'title' => $product->getTitle(),
|
||||||
@ -451,7 +451,7 @@ class TemplateVars
|
|||||||
'steuer' => $steuer,
|
'steuer' => $steuer,
|
||||||
'brutto' => $brutto,
|
'brutto' => $brutto,
|
||||||
);
|
);
|
||||||
} elseif ($product->hasCalcXml()) {
|
} elseif ($product->hasCalcXml() && $product->getType() == 6) {
|
||||||
$paperContainer = new PaperContainer();
|
$paperContainer = new PaperContainer();
|
||||||
$paperContainer->parse(simplexml_load_string($shop->getInstall()->getPaperContainer()));
|
$paperContainer->parse(simplexml_load_string($shop->getInstall()->getPaperContainer()));
|
||||||
|
|
||||||
@ -470,7 +470,7 @@ class TemplateVars
|
|||||||
if (isset($options['kalk_artikel'])) {
|
if (isset($options['kalk_artikel'])) {
|
||||||
$engine->setActiveArticle($options['kalk_artikel']);
|
$engine->setActiveArticle($options['kalk_artikel']);
|
||||||
}
|
}
|
||||||
if($xmlProduct != "") {
|
if ($xmlProduct != "") {
|
||||||
$engine->setActiveArticle($xmlProduct);
|
$engine->setActiveArticle($xmlProduct);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -59,7 +59,7 @@ if(isset($_options["logo"]) && $_options["logo"] == true) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$options->outputBase64 = false;
|
$options->outputBase64 = false;
|
||||||
$options->scale = 30;
|
//$options->scale = 30;
|
||||||
if(isset($_options["logo"]) && $_options["logo"] !== "") {
|
if(isset($_options["logo"]) && $_options["logo"] !== "") {
|
||||||
$options->addLogoSpace = true;
|
$options->addLogoSpace = true;
|
||||||
$options->logoSpaceWidth = 13;
|
$options->logoSpaceWidth = 13;
|
||||||
|
|||||||
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\System\UpdateBundle\Migrations;
|
||||||
|
|
||||||
|
class Version202411271406 extends Base
|
||||||
|
{
|
||||||
|
public function migrateDatabase(): void
|
||||||
|
{
|
||||||
|
$this->entityManager->getConnection()->exec("ALTER TABLE orderspos ADD INDEX created_date (createdd);");
|
||||||
|
$this->entityManager->getConnection()->exec("ALTER TABLE papierdb ADD INDEX art_nr (art_nr);");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -671,6 +671,18 @@
|
|||||||
"symfony/intl": {
|
"symfony/intl": {
|
||||||
"version": "v4.4.7"
|
"version": "v4.4.7"
|
||||||
},
|
},
|
||||||
|
"symfony/lock": {
|
||||||
|
"version": "6.4",
|
||||||
|
"recipe": {
|
||||||
|
"repo": "github.com/symfony/recipes",
|
||||||
|
"branch": "main",
|
||||||
|
"version": "5.2",
|
||||||
|
"ref": "8e937ff2b4735d110af1770f242c1107fdab4c8e"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"config/packages/lock.yaml"
|
||||||
|
]
|
||||||
|
},
|
||||||
"symfony/mailer": {
|
"symfony/mailer": {
|
||||||
"version": "4.3",
|
"version": "4.3",
|
||||||
"recipe": {
|
"recipe": {
|
||||||
|
|||||||
@ -91,11 +91,11 @@
|
|||||||
<script>
|
<script>
|
||||||
$.post("{{ instanceService.getInstance().formatedSupportUrl }}/apilogin?X-AUTH-TOKEN={{ instanceService.getInstance().supporttoken }}&to=bridge", function(msg){
|
$.post("{{ instanceService.getInstance().formatedSupportUrl }}/apilogin?X-AUTH-TOKEN={{ instanceService.getInstance().supporttoken }}&to=bridge", function(msg){
|
||||||
if(msg != "") {
|
if(msg != "") {
|
||||||
$(".swarm").html(msg);
|
//$(".swarm").html(msg);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
128
src/new/tests/PSC/Shop/Order/Api/UpdateTest.php
Normal file
128
src/new/tests/PSC/Shop/Order/Api/UpdateTest.php
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Tests\PSC\Shop\Order\Api;
|
||||||
|
|
||||||
|
use PSC\Shop\EntityBundle\Repository\JobRepository;
|
||||||
|
use Tests\RefreshDatabaseTrait;
|
||||||
|
use PSC\Shop\ContactBundle\Repository\ContactRepository;
|
||||||
|
use PSC\Shop\EntityBundle\Entity\Shop;
|
||||||
|
use PSC\Shop\EntityBundle\Repository\ShopRepository;
|
||||||
|
use PSC\Shop\PaymentBundle\Repository\PaymentRepository;
|
||||||
|
use PSC\Shop\ShippingBundle\Repository\ShippingRepository;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
||||||
|
|
||||||
|
class UpdateTest extends WebTestCase
|
||||||
|
{
|
||||||
|
use RefreshDatabaseTrait;
|
||||||
|
|
||||||
|
public function testCreateOrderDefault(): void
|
||||||
|
{
|
||||||
|
$client = static::createClient();
|
||||||
|
|
||||||
|
$shopRepository = static::getContainer()->get(ShopRepository::class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Shop $shop
|
||||||
|
*/
|
||||||
|
$shop = $shopRepository->findOneBy(['title' => 'Printchampion']);
|
||||||
|
|
||||||
|
$shippingRepository = static::getContainer()->get(ShippingRepository::class);
|
||||||
|
|
||||||
|
$paymentRepository = static::getContainer()->get(PaymentRepository::class);
|
||||||
|
|
||||||
|
$client->jsonRequest(
|
||||||
|
'POST',
|
||||||
|
'/api/order/create',
|
||||||
|
[
|
||||||
|
'shop' => [
|
||||||
|
'uuid' => (string)$shop->getUuid()
|
||||||
|
],
|
||||||
|
'type' => 2,
|
||||||
|
'shipping' => [
|
||||||
|
'uid' => $shippingRepository->findOneBy(['title' => 'Deutschlandweit'])->getUid()
|
||||||
|
],
|
||||||
|
'payment' => [
|
||||||
|
'uid' => $paymentRepository->findOneBy(['title' => 'per Rechnung'])->getUid()
|
||||||
|
],
|
||||||
|
'draft' => true,
|
||||||
|
'deliveryAddress' => [
|
||||||
|
'firstname' => 'Thomas',
|
||||||
|
'lastname' => 'Peterson',
|
||||||
|
'street' => 'Chausseestr.',
|
||||||
|
'houseNumber' => '24',
|
||||||
|
'zip' => '17506',
|
||||||
|
'city' => 'Gribow'
|
||||||
|
],
|
||||||
|
'invoiceAddress' => [
|
||||||
|
'firstname' => 'Thomas',
|
||||||
|
'lastname' => 'Peterson',
|
||||||
|
'street' => 'Chausseestr.',
|
||||||
|
'houseNumber' => '24',
|
||||||
|
'zip' => '17400',
|
||||||
|
'city' => 'Berlin'
|
||||||
|
],
|
||||||
|
'positions' => [
|
||||||
|
[
|
||||||
|
'count' => 1,
|
||||||
|
'product' => [
|
||||||
|
'title' => 'test XML',
|
||||||
|
'specialProductTypeObject' => [
|
||||||
|
'typ' => 6,
|
||||||
|
'taxClass' => 1900,
|
||||||
|
'xml' => '<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<kalkulation>
|
||||||
|
<artikel>
|
||||||
|
<name>Blocks A5 25blatt geleimt</name>
|
||||||
|
<kommentar>kein</kommentar>
|
||||||
|
|
||||||
|
<option id="auflage" name="Auflage" type="Input" width="3" require="true" default="1">
|
||||||
|
<auflage>
|
||||||
|
<grenze formel="(10*5)">1-</grenze>
|
||||||
|
</auflage>
|
||||||
|
</option>
|
||||||
|
|
||||||
|
</artikel>
|
||||||
|
</kalkulation>'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'count' => 1,
|
||||||
|
'product' => [
|
||||||
|
'title' => 'test Manual Position',
|
||||||
|
'specialProductTypeObject' => [
|
||||||
|
'typ' => 1,
|
||||||
|
'cent' => true,
|
||||||
|
'net' => 145,
|
||||||
|
'taxClass' => 1900
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
['HTTP_apiKey' => $shop->getApiKey()]
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertSame(200, $client->getResponse()->getStatusCode());
|
||||||
|
|
||||||
|
$data = json_decode($client->getResponse()->getContent(), true);
|
||||||
|
|
||||||
|
$createdDate = $data['created'];
|
||||||
|
|
||||||
|
$client->jsonRequest(
|
||||||
|
'POST',
|
||||||
|
'/api/order/getonebyuuid',
|
||||||
|
[
|
||||||
|
'uuid' => $data['uuid'],
|
||||||
|
],
|
||||||
|
['HTTP_apiKey' => $shop->getApiKey()]
|
||||||
|
);
|
||||||
|
|
||||||
|
$data = json_decode($client->getResponse()->getContent(), true);
|
||||||
|
|
||||||
|
self::assertSame($createdDate, $data['created']);
|
||||||
|
self::assertSame(200, $client->getResponse()->getStatusCode());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,329 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Tests\PSC\Shop\Order\Service;
|
||||||
|
|
||||||
|
use PSC\Shop\ContactBundle\Model\AccountType;
|
||||||
|
use PSC\Shop\ContactBundle\Model\Contact;
|
||||||
|
use Tests\RefreshDatabaseTrait;
|
||||||
|
use PSC\Component\ApiBundle\Model\Shop;
|
||||||
|
use PSC\Shop\ContactBundle\Model\Address;
|
||||||
|
use PSC\Shop\OrderBundle\Model\Order\Position;
|
||||||
|
use PSC\Shop\OrderBundle\Service\Calc;
|
||||||
|
use PSC\Shop\PaymentBundle\Model\Payment;
|
||||||
|
use PSC\Shop\ProductBundle\Model\Product;
|
||||||
|
use PSC\Shop\ProductBundle\Model\ProductSpecialObject;
|
||||||
|
use PSC\Shop\ShippingBundle\Model\Shipping;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
|
||||||
|
|
||||||
|
class CalcContactAccountTypeTest extends KernelTestCase
|
||||||
|
{
|
||||||
|
use RefreshDatabaseTrait;
|
||||||
|
|
||||||
|
public function testWithContactCalc()
|
||||||
|
{
|
||||||
|
self::bootKernel();
|
||||||
|
|
||||||
|
$container = static::getContainer();
|
||||||
|
|
||||||
|
/** @var Calc $calcService */
|
||||||
|
$calcService = $container->get(Calc::class);
|
||||||
|
|
||||||
|
$shop = new Shop();
|
||||||
|
$shop->setUuid('shop1');
|
||||||
|
|
||||||
|
$order = new \PSC\Shop\OrderBundle\Model\Order();
|
||||||
|
$order->setShop($shop);
|
||||||
|
|
||||||
|
$contact = new Contact();
|
||||||
|
$order->setContact($contact);
|
||||||
|
|
||||||
|
$shipping = new Shipping();
|
||||||
|
$shipping->setTaxClass(7);
|
||||||
|
$shipping->setPrice(560);
|
||||||
|
|
||||||
|
$payment = new Payment();
|
||||||
|
$payment->setTaxClass(19);
|
||||||
|
$payment->setPrice(450);
|
||||||
|
|
||||||
|
$order->setShipping($shipping);
|
||||||
|
$order->setPayment($payment);
|
||||||
|
|
||||||
|
$deliveryAddress = new Address();
|
||||||
|
$deliveryAddress->setCountry('de');
|
||||||
|
$deliveryAddress->setZip(17506);
|
||||||
|
|
||||||
|
$order->setDeliveryAddress($deliveryAddress);
|
||||||
|
|
||||||
|
$productW0 = new Product();
|
||||||
|
$productW0->setTitle('Manuelle Position 1');
|
||||||
|
|
||||||
|
$specialProductSettingsW0 = new ProductSpecialObject();
|
||||||
|
$specialProductSettingsW0->setCent(true);
|
||||||
|
$specialProductSettingsW0->setNet(13.12 * 100);
|
||||||
|
|
||||||
|
$productW0->setSpecialProductTypeObject($specialProductSettingsW0);
|
||||||
|
|
||||||
|
$positionW0 = new Position();
|
||||||
|
$positionW0->setProduct($productW0);
|
||||||
|
|
||||||
|
$order->addPosition($positionW0);
|
||||||
|
|
||||||
|
$productW1 = new Product();
|
||||||
|
$productW1->setTitle('Manuelle Position 2');
|
||||||
|
|
||||||
|
$specialProductSettingsW1 = new ProductSpecialObject();
|
||||||
|
$specialProductSettingsW1->setNet(34);
|
||||||
|
|
||||||
|
$productW1->setSpecialProductTypeObject($specialProductSettingsW1);
|
||||||
|
|
||||||
|
$positionW1 = new Position();
|
||||||
|
$positionW1->setProduct($productW1);
|
||||||
|
|
||||||
|
$order->addPosition($positionW1);
|
||||||
|
|
||||||
|
$productW2 = new Product();
|
||||||
|
$productW2->setTitle('Manuelle Position XML Calc W1');
|
||||||
|
|
||||||
|
$specialProductSettingsW2 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject();
|
||||||
|
$specialProductSettingsW2->setXml(file_get_contents(__DIR__ . '/calc2.xml'));
|
||||||
|
$specialProductSettingsW2->setParams(['auflage' => 10]);
|
||||||
|
|
||||||
|
$productW2->setSpecialProductTypeObject($specialProductSettingsW2);
|
||||||
|
|
||||||
|
$positionW2 = new Position();
|
||||||
|
$positionW2->setProduct($productW2);
|
||||||
|
|
||||||
|
$order->addPosition($positionW2);
|
||||||
|
|
||||||
|
$productW3 = new Product();
|
||||||
|
$productW3->setTitle('Manuelle Position XML Calc W2');
|
||||||
|
|
||||||
|
$specialProductSettingsW3 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject();
|
||||||
|
$specialProductSettingsW3->setXml(file_get_contents(__DIR__ . '/calc1.xml'));
|
||||||
|
$specialProductSettingsW3->setParams(['auflage' => 1000, 'auswahl_1' => 2]);
|
||||||
|
|
||||||
|
$productW3->setSpecialProductTypeObject($specialProductSettingsW3);
|
||||||
|
|
||||||
|
$positionW3 = new Position();
|
||||||
|
$positionW3->setProduct($productW3);
|
||||||
|
|
||||||
|
$order->addPosition($positionW3);
|
||||||
|
|
||||||
|
$calcService->calcOrder($order);
|
||||||
|
|
||||||
|
$this->assertSame(1312, $positionW0->getPrice()->getNet());
|
||||||
|
$this->assertSame(3400, $positionW1->getPrice()->getNet());
|
||||||
|
$this->assertSame(210, $positionW2->getPrice()->getNet());
|
||||||
|
$this->assertSame(15000, $positionW3->getPrice()->getNet());
|
||||||
|
$this->assertSame(2850, $positionW3->getPrice()->getVat());
|
||||||
|
|
||||||
|
$this->assertSame(20932, $order->getNet());
|
||||||
|
$this->assertSame(3912, $order->getVat());
|
||||||
|
$this->assertSame(24844, $order->getGross());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWithoutContactCalc()
|
||||||
|
{
|
||||||
|
self::bootKernel();
|
||||||
|
|
||||||
|
$container = static::getContainer();
|
||||||
|
|
||||||
|
/** @var Calc $calcService */
|
||||||
|
$calcService = $container->get(Calc::class);
|
||||||
|
|
||||||
|
$shop = new Shop();
|
||||||
|
$shop->setUuid('shop1');
|
||||||
|
|
||||||
|
$order = new \PSC\Shop\OrderBundle\Model\Order();
|
||||||
|
$order->setShop($shop);
|
||||||
|
|
||||||
|
$shipping = new Shipping();
|
||||||
|
$shipping->setTaxClass(7);
|
||||||
|
$shipping->setPrice(560);
|
||||||
|
|
||||||
|
$payment = new Payment();
|
||||||
|
$payment->setTaxClass(19);
|
||||||
|
$payment->setPrice(450);
|
||||||
|
|
||||||
|
$order->setShipping($shipping);
|
||||||
|
$order->setPayment($payment);
|
||||||
|
|
||||||
|
$deliveryAddress = new Address();
|
||||||
|
$deliveryAddress->setCountry('de');
|
||||||
|
$deliveryAddress->setZip(17506);
|
||||||
|
|
||||||
|
$order->setDeliveryAddress($deliveryAddress);
|
||||||
|
|
||||||
|
$productW0 = new Product();
|
||||||
|
$productW0->setTitle('Manuelle Position 1');
|
||||||
|
|
||||||
|
$specialProductSettingsW0 = new ProductSpecialObject();
|
||||||
|
$specialProductSettingsW0->setCent(true);
|
||||||
|
$specialProductSettingsW0->setNet(13.12 * 100);
|
||||||
|
|
||||||
|
$productW0->setSpecialProductTypeObject($specialProductSettingsW0);
|
||||||
|
|
||||||
|
$positionW0 = new Position();
|
||||||
|
$positionW0->setProduct($productW0);
|
||||||
|
|
||||||
|
$order->addPosition($positionW0);
|
||||||
|
|
||||||
|
$productW1 = new Product();
|
||||||
|
$productW1->setTitle('Manuelle Position 2');
|
||||||
|
|
||||||
|
$specialProductSettingsW1 = new ProductSpecialObject();
|
||||||
|
$specialProductSettingsW1->setNet(34);
|
||||||
|
|
||||||
|
$productW1->setSpecialProductTypeObject($specialProductSettingsW1);
|
||||||
|
|
||||||
|
$positionW1 = new Position();
|
||||||
|
$positionW1->setProduct($productW1);
|
||||||
|
|
||||||
|
$order->addPosition($positionW1);
|
||||||
|
|
||||||
|
$productW2 = new Product();
|
||||||
|
$productW2->setTitle('Manuelle Position XML Calc W1');
|
||||||
|
|
||||||
|
$specialProductSettingsW2 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject();
|
||||||
|
$specialProductSettingsW2->setXml(file_get_contents(__DIR__ . '/calc2.xml'));
|
||||||
|
$specialProductSettingsW2->setParams(['auflage' => 10]);
|
||||||
|
|
||||||
|
$productW2->setSpecialProductTypeObject($specialProductSettingsW2);
|
||||||
|
|
||||||
|
$positionW2 = new Position();
|
||||||
|
$positionW2->setProduct($productW2);
|
||||||
|
|
||||||
|
$order->addPosition($positionW2);
|
||||||
|
|
||||||
|
$productW3 = new Product();
|
||||||
|
$productW3->setTitle('Manuelle Position XML Calc W2');
|
||||||
|
|
||||||
|
$specialProductSettingsW3 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject();
|
||||||
|
$specialProductSettingsW3->setXml(file_get_contents(__DIR__ . '/calc1.xml'));
|
||||||
|
$specialProductSettingsW3->setParams(['auflage' => 1000, 'auswahl_1' => 2]);
|
||||||
|
|
||||||
|
$productW3->setSpecialProductTypeObject($specialProductSettingsW3);
|
||||||
|
|
||||||
|
$positionW3 = new Position();
|
||||||
|
$positionW3->setProduct($productW3);
|
||||||
|
|
||||||
|
$order->addPosition($positionW3);
|
||||||
|
|
||||||
|
$calcService->calcOrder($order);
|
||||||
|
|
||||||
|
$this->assertSame(1312, $positionW0->getPrice()->getNet());
|
||||||
|
$this->assertSame(3400, $positionW1->getPrice()->getNet());
|
||||||
|
$this->assertSame(210, $positionW2->getPrice()->getNet());
|
||||||
|
$this->assertSame(15000, $positionW3->getPrice()->getNet());
|
||||||
|
$this->assertSame(2850, $positionW3->getPrice()->getVat());
|
||||||
|
|
||||||
|
$this->assertSame(20932, $order->getNet());
|
||||||
|
$this->assertSame(3912, $order->getVat());
|
||||||
|
$this->assertSame(24844, $order->getGross());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWithContactCompanyCalc()
|
||||||
|
{
|
||||||
|
self::bootKernel();
|
||||||
|
|
||||||
|
$container = static::getContainer();
|
||||||
|
|
||||||
|
/** @var Calc $calcService */
|
||||||
|
$calcService = $container->get(Calc::class);
|
||||||
|
|
||||||
|
$shop = new Shop();
|
||||||
|
$shop->setUuid('shop1');
|
||||||
|
|
||||||
|
$order = new \PSC\Shop\OrderBundle\Model\Order();
|
||||||
|
$order->setShop($shop);
|
||||||
|
|
||||||
|
$contact = new Contact();
|
||||||
|
$contact->setAccountType(AccountType::COMPANY);
|
||||||
|
|
||||||
|
$order->setContact($contact);
|
||||||
|
|
||||||
|
$shipping = new Shipping();
|
||||||
|
$shipping->setTaxClass(7);
|
||||||
|
$shipping->setPrice(560);
|
||||||
|
|
||||||
|
$payment = new Payment();
|
||||||
|
$payment->setTaxClass(19);
|
||||||
|
$payment->setPrice(450);
|
||||||
|
|
||||||
|
$order->setShipping($shipping);
|
||||||
|
$order->setPayment($payment);
|
||||||
|
|
||||||
|
$deliveryAddress = new Address();
|
||||||
|
$deliveryAddress->setCountry('de');
|
||||||
|
$deliveryAddress->setZip(17506);
|
||||||
|
|
||||||
|
$order->setDeliveryAddress($deliveryAddress);
|
||||||
|
|
||||||
|
$productW0 = new Product();
|
||||||
|
$productW0->setTitle('Manuelle Position 1');
|
||||||
|
|
||||||
|
$specialProductSettingsW0 = new ProductSpecialObject();
|
||||||
|
$specialProductSettingsW0->setCent(true);
|
||||||
|
$specialProductSettingsW0->setNet(13.12 * 100);
|
||||||
|
|
||||||
|
$productW0->setSpecialProductTypeObject($specialProductSettingsW0);
|
||||||
|
|
||||||
|
$positionW0 = new Position();
|
||||||
|
$positionW0->setProduct($productW0);
|
||||||
|
|
||||||
|
$order->addPosition($positionW0);
|
||||||
|
|
||||||
|
$productW1 = new Product();
|
||||||
|
$productW1->setTitle('Manuelle Position 2');
|
||||||
|
|
||||||
|
$specialProductSettingsW1 = new ProductSpecialObject();
|
||||||
|
$specialProductSettingsW1->setNet(34);
|
||||||
|
|
||||||
|
$productW1->setSpecialProductTypeObject($specialProductSettingsW1);
|
||||||
|
|
||||||
|
$positionW1 = new Position();
|
||||||
|
$positionW1->setProduct($productW1);
|
||||||
|
|
||||||
|
$order->addPosition($positionW1);
|
||||||
|
|
||||||
|
$productW2 = new Product();
|
||||||
|
$productW2->setTitle('Manuelle Position XML Calc W1');
|
||||||
|
|
||||||
|
$specialProductSettingsW2 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject();
|
||||||
|
$specialProductSettingsW2->setXml(file_get_contents(__DIR__ . '/calc2.xml'));
|
||||||
|
$specialProductSettingsW2->setParams(['auflage' => 10]);
|
||||||
|
|
||||||
|
$productW2->setSpecialProductTypeObject($specialProductSettingsW2);
|
||||||
|
|
||||||
|
$positionW2 = new Position();
|
||||||
|
$positionW2->setProduct($productW2);
|
||||||
|
|
||||||
|
$order->addPosition($positionW2);
|
||||||
|
|
||||||
|
$productW3 = new Product();
|
||||||
|
$productW3->setTitle('Manuelle Position XML Calc W2');
|
||||||
|
|
||||||
|
$specialProductSettingsW3 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject();
|
||||||
|
$specialProductSettingsW3->setXml(file_get_contents(__DIR__ . '/calc1.xml'));
|
||||||
|
$specialProductSettingsW3->setParams(['auflage' => 1000, 'auswahl_1' => 2]);
|
||||||
|
|
||||||
|
$productW3->setSpecialProductTypeObject($specialProductSettingsW3);
|
||||||
|
|
||||||
|
$positionW3 = new Position();
|
||||||
|
$positionW3->setProduct($productW3);
|
||||||
|
|
||||||
|
$order->addPosition($positionW3);
|
||||||
|
|
||||||
|
$calcService->calcOrder($order);
|
||||||
|
|
||||||
|
$this->assertSame(1312, $positionW0->getPrice()->getNet());
|
||||||
|
$this->assertSame(3400, $positionW1->getPrice()->getNet());
|
||||||
|
$this->assertSame(168, $positionW2->getPrice()->getNet());
|
||||||
|
$this->assertSame(15000, $positionW3->getPrice()->getNet());
|
||||||
|
$this->assertSame(2850, $positionW3->getPrice()->getVat());
|
||||||
|
|
||||||
|
$this->assertSame(20890, $order->getNet());
|
||||||
|
$this->assertSame(3904, $order->getVat());
|
||||||
|
$this->assertSame(24794, $order->getGross());
|
||||||
|
}
|
||||||
|
}
|
||||||
24
src/new/tests/PSC/Shop/Order/Service/calc2.xml
Normal file
24
src/new/tests/PSC/Shop/Order/Service/calc2.xml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<kalkulation>
|
||||||
|
<artikel>
|
||||||
|
<name>SD-Durchschreibesätze A4-Blocks</name>
|
||||||
|
<kommentar>210 mm x 297 mm</kommentar>
|
||||||
|
|
||||||
|
<option id="auflage" name="Auflage" type="Input" default="10"/>
|
||||||
|
|
||||||
|
<option id="calc_rabatt" type="Hidden">
|
||||||
|
<contact.accountType>
|
||||||
|
<grenze calc_value="1">1</grenze>
|
||||||
|
<grenze calc_value="0.8">2</grenze>
|
||||||
|
<grenze calc_value="0.5">3</grenze>
|
||||||
|
</contact.accountType>
|
||||||
|
</option>
|
||||||
|
|
||||||
|
<option id="calc" type="Hidden">
|
||||||
|
<auflage>
|
||||||
|
<grenze formel="0.21*$Vauflage$V*$CVcalc_rabatt_contact.accountType$CV">1-</grenze>
|
||||||
|
</auflage>
|
||||||
|
</option>
|
||||||
|
|
||||||
|
</artikel>
|
||||||
|
</kalkulation>
|
||||||
235
src/new/tests/Plugins/System/PSC/XmlCalc/Api/CreateOrderTest.php
Normal file
235
src/new/tests/Plugins/System/PSC/XmlCalc/Api/CreateOrderTest.php
Normal file
@ -0,0 +1,235 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Plugins\System\PSC\XmlCalc\Api;
|
||||||
|
|
||||||
|
use PSC\Shop\ContactBundle\Model\AccountType;
|
||||||
|
use PSC\Shop\EntityBundle\Repository\JobRepository;
|
||||||
|
use Tests\RefreshDatabaseTrait;
|
||||||
|
use PSC\Shop\ContactBundle\Repository\ContactRepository;
|
||||||
|
use PSC\Shop\EntityBundle\Entity\Shop;
|
||||||
|
use PSC\Shop\EntityBundle\Repository\ShopRepository;
|
||||||
|
use PSC\Shop\PaymentBundle\Repository\PaymentRepository;
|
||||||
|
use PSC\Shop\ShippingBundle\Repository\ShippingRepository;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
||||||
|
|
||||||
|
class CreateOrderTest extends WebTestCase
|
||||||
|
{
|
||||||
|
use RefreshDatabaseTrait;
|
||||||
|
|
||||||
|
public function testCreateOrderContactPersonal(): void
|
||||||
|
{
|
||||||
|
$client = static::createClient();
|
||||||
|
|
||||||
|
$shopRepository = static::getContainer()->get(ShopRepository::class);
|
||||||
|
|
||||||
|
$shop = $shopRepository->findOneBy(['title' => 'Printchampion']);
|
||||||
|
|
||||||
|
$shippingRepository = static::getContainer()->get(ShippingRepository::class);
|
||||||
|
|
||||||
|
$paymentRepository = static::getContainer()->get(PaymentRepository::class);
|
||||||
|
|
||||||
|
$client->jsonRequest(
|
||||||
|
'POST',
|
||||||
|
'/api/order/create',
|
||||||
|
[
|
||||||
|
'shop' => [
|
||||||
|
'uuid' => (string)$shop->getUuid()
|
||||||
|
],
|
||||||
|
'type' => 2,
|
||||||
|
'shipping' => [
|
||||||
|
'uid' => $shippingRepository->findOneBy(['title' => 'Abholung vor Ort'])->getUid()
|
||||||
|
],
|
||||||
|
'payment' => [
|
||||||
|
'uid' => $paymentRepository->findOneBy(['title' => 'Bar bei Abholung'])->getUid()
|
||||||
|
],
|
||||||
|
'draft' => false,
|
||||||
|
'deliveryAddress' => [
|
||||||
|
'firstname' => 'Thomas',
|
||||||
|
'lastname' => 'Peterson',
|
||||||
|
'street' => 'Chausseestr.',
|
||||||
|
'houseNumber' => '24',
|
||||||
|
'zip' => '17506',
|
||||||
|
'city' => 'Gribow'
|
||||||
|
],
|
||||||
|
'invoiceAddress' => [
|
||||||
|
'firstname' => 'Thomas',
|
||||||
|
'lastname' => 'Peterson',
|
||||||
|
'street' => 'Chausseestr.',
|
||||||
|
'houseNumber' => '24',
|
||||||
|
'zip' => '17400',
|
||||||
|
'city' => 'Berlin'
|
||||||
|
],
|
||||||
|
'positions' => [
|
||||||
|
[
|
||||||
|
'count' => 1,
|
||||||
|
'product' => [
|
||||||
|
'title' => 'test XML',
|
||||||
|
'specialProductTypeObject' => [
|
||||||
|
'typ' => 6,
|
||||||
|
'taxClass' => 1900,
|
||||||
|
'xml' => '<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<kalkulation>
|
||||||
|
<artikel>
|
||||||
|
<name>SD-Durchschreibesätze A4-Blocks</name>
|
||||||
|
<kommentar>210 mm x 297 mm</kommentar>
|
||||||
|
|
||||||
|
<option id="auflage" name="Auflage" type="Input" default="10"/>
|
||||||
|
|
||||||
|
<option id="calc_rabatt" type="Hidden">
|
||||||
|
<contact.accountType>
|
||||||
|
<grenze calc_value="1">1</grenze>
|
||||||
|
<grenze calc_value="0.8">2</grenze>
|
||||||
|
<grenze calc_value="0.5">3</grenze>
|
||||||
|
</contact.accountType>
|
||||||
|
</option>
|
||||||
|
|
||||||
|
<option id="calc" type="Hidden">
|
||||||
|
<auflage>
|
||||||
|
<grenze formel="10*$Vauflage$V*$CVcalc_rabatt_contact.accountType$CV">1-</grenze>
|
||||||
|
</auflage>
|
||||||
|
</option>
|
||||||
|
|
||||||
|
</artikel>
|
||||||
|
</kalkulation>'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
['HTTP_apiKey' => $shop->getApiKey()]
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertSame(200, $client->getResponse()->getStatusCode());
|
||||||
|
|
||||||
|
$data = json_decode($client->getResponse()->getContent(), true);
|
||||||
|
self::assertSame(11900, $data['gross']);
|
||||||
|
|
||||||
|
$client->jsonRequest(
|
||||||
|
'POST',
|
||||||
|
'/api/order/getonebyuuid',
|
||||||
|
[
|
||||||
|
'uuid' => $data['uuid'],
|
||||||
|
],
|
||||||
|
['HTTP_apiKey' => $shop->getApiKey()]
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertSame(200, $client->getResponse()->getStatusCode());
|
||||||
|
$data = json_decode($client->getResponse()->getContent(), true);
|
||||||
|
|
||||||
|
self::assertSame(11900, $data['gross']);
|
||||||
|
|
||||||
|
$jobs = static::getContainer()->get(JobRepository::class);
|
||||||
|
self::assertCount(0, $jobs->findBy(['data.order' => $data['uuid']]));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateOrderContactCompany(): void
|
||||||
|
{
|
||||||
|
$client = static::createClient();
|
||||||
|
|
||||||
|
$shopRepository = static::getContainer()->get(ShopRepository::class);
|
||||||
|
|
||||||
|
$shop = $shopRepository->findOneBy(['title' => 'Printchampion']);
|
||||||
|
|
||||||
|
$shippingRepository = static::getContainer()->get(ShippingRepository::class);
|
||||||
|
|
||||||
|
$paymentRepository = static::getContainer()->get(PaymentRepository::class);
|
||||||
|
|
||||||
|
$client->jsonRequest(
|
||||||
|
'POST',
|
||||||
|
'/api/order/create',
|
||||||
|
[
|
||||||
|
'shop' => [
|
||||||
|
'uuid' => (string)$shop->getUuid()
|
||||||
|
],
|
||||||
|
'type' => 2,
|
||||||
|
'shipping' => [
|
||||||
|
'uid' => $shippingRepository->findOneBy(['title' => 'Abholung vor Ort'])->getUid()
|
||||||
|
],
|
||||||
|
'payment' => [
|
||||||
|
'uid' => $paymentRepository->findOneBy(['title' => 'Bar bei Abholung'])->getUid()
|
||||||
|
],
|
||||||
|
'contact' => [
|
||||||
|
'accountType' => AccountType::COMPANY
|
||||||
|
],
|
||||||
|
'draft' => false,
|
||||||
|
'deliveryAddress' => [
|
||||||
|
'firstname' => 'Thomas',
|
||||||
|
'lastname' => 'Peterson',
|
||||||
|
'street' => 'Chausseestr.',
|
||||||
|
'houseNumber' => '24',
|
||||||
|
'zip' => '17506',
|
||||||
|
'city' => 'Gribow'
|
||||||
|
],
|
||||||
|
'invoiceAddress' => [
|
||||||
|
'firstname' => 'Thomas',
|
||||||
|
'lastname' => 'Peterson',
|
||||||
|
'street' => 'Chausseestr.',
|
||||||
|
'houseNumber' => '24',
|
||||||
|
'zip' => '17400',
|
||||||
|
'city' => 'Berlin'
|
||||||
|
],
|
||||||
|
'positions' => [
|
||||||
|
[
|
||||||
|
'count' => 1,
|
||||||
|
'product' => [
|
||||||
|
'title' => 'test XML',
|
||||||
|
'specialProductTypeObject' => [
|
||||||
|
'typ' => 6,
|
||||||
|
'taxClass' => 1900,
|
||||||
|
'xml' => '<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<kalkulation>
|
||||||
|
<artikel>
|
||||||
|
<name>SD-Durchschreibesätze A4-Blocks</name>
|
||||||
|
<kommentar>210 mm x 297 mm</kommentar>
|
||||||
|
|
||||||
|
<option id="auflage" name="Auflage" type="Input" default="10"/>
|
||||||
|
|
||||||
|
<option id="calc_rabatt" type="Hidden">
|
||||||
|
<contact.accountType>
|
||||||
|
<grenze calc_value="1">1</grenze>
|
||||||
|
<grenze calc_value="0.8">2</grenze>
|
||||||
|
<grenze calc_value="0.5">3</grenze>
|
||||||
|
</contact.accountType>
|
||||||
|
</option>
|
||||||
|
|
||||||
|
<option id="calc" type="Hidden">
|
||||||
|
<auflage>
|
||||||
|
<grenze formel="10*$Vauflage$V*$CVcalc_rabatt_contact.accountType$CV">1-</grenze>
|
||||||
|
</auflage>
|
||||||
|
</option>
|
||||||
|
|
||||||
|
</artikel>
|
||||||
|
</kalkulation>'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
['HTTP_apiKey' => $shop->getApiKey()]
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertSame(200, $client->getResponse()->getStatusCode());
|
||||||
|
|
||||||
|
$data = json_decode($client->getResponse()->getContent(), true);
|
||||||
|
self::assertSame(9520, $data['gross']);
|
||||||
|
|
||||||
|
$client->jsonRequest(
|
||||||
|
'POST',
|
||||||
|
'/api/order/getonebyuuid',
|
||||||
|
[
|
||||||
|
'uuid' => $data['uuid'],
|
||||||
|
],
|
||||||
|
['HTTP_apiKey' => $shop->getApiKey()]
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertSame(200, $client->getResponse()->getStatusCode());
|
||||||
|
$data = json_decode($client->getResponse()->getContent(), true);
|
||||||
|
|
||||||
|
self::assertSame(9520, $data['gross']);
|
||||||
|
|
||||||
|
$jobs = static::getContainer()->get(JobRepository::class);
|
||||||
|
self::assertCount(0, $jobs->findBy(['data.order' => $data['uuid']]));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Plugins\System\PSC\XmlCalc\Api;
|
||||||
|
|
||||||
|
use PSC\Shop\ContactBundle\Repository\ContactRepository;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
||||||
|
use Tests\RefreshDatabaseTrait;
|
||||||
|
|
||||||
|
class GetPriceTest extends WebTestCase
|
||||||
|
{
|
||||||
|
use RefreshDatabaseTrait;
|
||||||
|
|
||||||
|
public function testGetPriceWithoutUser(): void
|
||||||
|
{
|
||||||
|
$client = static::createClient();
|
||||||
|
|
||||||
|
$client->jsonRequest('POST', '/api/plugin/system/psc/xmlcalc/price', ['product' => '01938686-0e4d-7da9-bae3-b2e1b1681f9f'], []);
|
||||||
|
$this->assertResponseIsSuccessful();
|
||||||
|
|
||||||
|
$data = json_decode($client->getResponse()->getContent(), true);
|
||||||
|
|
||||||
|
self::assertSame(2600, $data['netto']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetPriceWithCompany(): void
|
||||||
|
{
|
||||||
|
$client = static::createClient();
|
||||||
|
$userRepository = static::getContainer()->get(ContactRepository::class);
|
||||||
|
|
||||||
|
$testUser = $userRepository->loadUserByUsername('company@shop.de');
|
||||||
|
|
||||||
|
$client->loginUser($testUser, 'api');
|
||||||
|
|
||||||
|
$client->jsonRequest('POST', '/api/plugin/system/psc/xmlcalc/price', ['product' => '01938686-0e4d-7da9-bae3-b2e1b1681f9f'], []);
|
||||||
|
$this->assertResponseIsSuccessful();
|
||||||
|
|
||||||
|
$data = json_decode($client->getResponse()->getContent(), true);
|
||||||
|
|
||||||
|
self::assertSame(2080, $data['netto']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetPriceWithAssociation(): void
|
||||||
|
{
|
||||||
|
$client = static::createClient();
|
||||||
|
$userRepository = static::getContainer()->get(ContactRepository::class);
|
||||||
|
|
||||||
|
$testUser = $userRepository->loadUserByUsername('association@shop.de');
|
||||||
|
|
||||||
|
$client->loginUser($testUser, 'api');
|
||||||
|
|
||||||
|
$client->jsonRequest('POST', '/api/plugin/system/psc/xmlcalc/price', ['product' => '01938686-0e4d-7da9-bae3-b2e1b1681f9f'], []);
|
||||||
|
$this->assertResponseIsSuccessful();
|
||||||
|
|
||||||
|
$data = json_decode($client->getResponse()->getContent(), true);
|
||||||
|
|
||||||
|
self::assertSame(1300, $data['netto']);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -7,6 +7,8 @@ namespace Tests;
|
|||||||
use Doctrine\ODM\MongoDB\DocumentManager;
|
use Doctrine\ODM\MongoDB\DocumentManager;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Hautelook\AliceBundle\PhpUnit\BaseDatabaseTrait;
|
use Hautelook\AliceBundle\PhpUnit\BaseDatabaseTrait;
|
||||||
|
use PSC\Shop\ContactBundle\Model\AccountType;
|
||||||
|
use PSC\Shop\EntityBundle\Document\Contact;
|
||||||
use PSC\Shop\EntityBundle\Document\Country;
|
use PSC\Shop\EntityBundle\Document\Country;
|
||||||
use PSC\Shop\EntityBundle\Document\Instance;
|
use PSC\Shop\EntityBundle\Document\Instance;
|
||||||
use PSC\Shop\EntityBundle\Document\Order;
|
use PSC\Shop\EntityBundle\Document\Order;
|
||||||
@ -125,6 +127,26 @@ trait RefreshDatabaseTrait
|
|||||||
$doc->flush();
|
$doc->flush();
|
||||||
$doc->clear();
|
$doc->clear();
|
||||||
}
|
}
|
||||||
|
$contactEntity = $em->getRepository(\PSC\Shop\EntityBundle\Entity\Contact::class)->findOneBy(['username' => 'company@shop.de']);
|
||||||
|
if (!$doc->getRepository(Contact::class)->findOneBy(['uid' => (string)$contactEntity->getUid()])) {
|
||||||
|
$contact = new Contact();
|
||||||
|
$contact->setAccountType(AccountType::COMPANY);
|
||||||
|
$contact->setUid((string)$contactEntity->getUid());
|
||||||
|
$doc->persist($contact);
|
||||||
|
$doc->flush();
|
||||||
|
$doc->clear();
|
||||||
|
}
|
||||||
|
$contactEntity = $em->getRepository(\PSC\Shop\EntityBundle\Entity\Contact::class)->findOneBy(['username' => 'association@shop.de']);
|
||||||
|
if (!$doc->getRepository(Contact::class)->findOneBy(['uid' => (string)$contactEntity->getUid()])) {
|
||||||
|
$contact = new Contact();
|
||||||
|
$contact->setAccountType(AccountType::ASSOCIATION);
|
||||||
|
$contact->setUid((string)$contactEntity->getUid());
|
||||||
|
$doc->persist($contact);
|
||||||
|
$doc->flush();
|
||||||
|
$doc->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return $kernel;
|
return $kernel;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,6 +36,18 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body class="w-screen h-screen flex flex-col">
|
<body class="w-screen h-screen flex flex-col">
|
||||||
|
<div class="absolute bg-white bg-opacity-60 z-10 h-full w-full flex items-center justify-center loadingScreen" >
|
||||||
|
<div class="flex items-center">
|
||||||
|
<span class="text-3xl mr-4">Loading</span>
|
||||||
|
<svg class="animate-spin h-8 w-8 text-gray-800" xmlns="http://www.w3.org/2000/svg" fill="none"
|
||||||
|
viewBox="0 0 24 24">
|
||||||
|
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
||||||
|
<path class="opacity-75" fill="currentColor"
|
||||||
|
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
|
||||||
|
</path>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="w-screen h-screen flex flex-col">
|
<div class="w-screen h-screen flex flex-col">
|
||||||
<div class="flex flex-row bg-gray-100 sticky top-0 mb-2 p-1">
|
<div class="flex flex-row bg-gray-100 sticky top-0 mb-2 p-1">
|
||||||
<a class="basis-1/3 pl-1 font-bold text-2xl">{{ product.title }}</a>
|
<a class="basis-1/3 pl-1 font-bold text-2xl">{{ product.title }}</a>
|
||||||
@ -98,9 +110,15 @@
|
|||||||
$('.save').click(function() {
|
$('.save').click(function() {
|
||||||
$('.save').prop('disabled', true);
|
$('.save').prop('disabled', true);
|
||||||
var arr = $("#customerForm").serializeArray();
|
var arr = $("#customerForm").serializeArray();
|
||||||
$.each($("input:checkbox:not(:checked)"), function(i, e) {
|
$.each($("input:checkbox"), function(i, e) {
|
||||||
arr.push({name: e.name, value: "0"});
|
if(!$(this).is(':checked')) {
|
||||||
|
arr.push({name: e.name, value: "0"});
|
||||||
|
}else{
|
||||||
|
arr.push({name: e.name, value: "1"});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('.loadingScreen').removeClass('hidden');
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
url: '/apps/api/plugin/custom/psc/collectlayouter/{% if mode == 3 %}savenewcontact{% else %}savecontact{% endif %}/' + productUUId,
|
url: '/apps/api/plugin/custom/psc/collectlayouter/{% if mode == 3 %}savenewcontact{% else %}savecontact{% endif %}/' + productUUId,
|
||||||
@ -134,6 +152,7 @@
|
|||||||
|
|
||||||
$('.pleasewait').html('Bitte Warten');
|
$('.pleasewait').html('Bitte Warten');
|
||||||
|
|
||||||
|
$('.loadingScreen').removeClass('hidden');
|
||||||
var dataObj = $.param({uuid: '{{ product.uuid }}', modus: 102, layouter_uuid: '{{ layouterUuid }}' });
|
var dataObj = $.param({uuid: '{{ product.uuid }}', modus: 102, layouter_uuid: '{{ layouterUuid }}' });
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@ -142,8 +161,12 @@
|
|||||||
dataType: "json",
|
dataType: "json",
|
||||||
success: function (result) {
|
success: function (result) {
|
||||||
var arr = $("#customerForm").serializeArray();
|
var arr = $("#customerForm").serializeArray();
|
||||||
$.each($("input:checkbox:not(:checked)"), function(i, e) {
|
$.each($("input:checkbox"), function(i, e) {
|
||||||
arr.push({name: e.name, value: "0"});
|
if(!$(this).is(':checked')) {
|
||||||
|
arr.push({name: e.name, value: "0"});
|
||||||
|
}else{
|
||||||
|
arr.push({name: e.name, value: "1"});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -476,7 +499,7 @@
|
|||||||
var $group = $('<div class="input-group input-group-sm"></div>');
|
var $group = $('<div class="input-group input-group-sm"></div>');
|
||||||
}
|
}
|
||||||
var $groupText = $('<div class="input-group-text"></div>');
|
var $groupText = $('<div class="input-group-text"></div>');
|
||||||
var $check = $('<input class="form-check-input mt-0" type="hidden" name="data[' + element.id + '][enable]" value="1">');
|
var $check = $('<input class="form-check-input mt-0" type="hidden" name="data[' + element.id + '][enable]" value="0">');
|
||||||
|
|
||||||
var $message = $('<div class="required hidden text-lime-700">Ist ein Pflichfeld </div>');
|
var $message = $('<div class="required hidden text-lime-700">Ist ein Pflichfeld </div>');
|
||||||
|
|
||||||
@ -484,7 +507,7 @@
|
|||||||
if(element.required) {
|
if(element.required) {
|
||||||
$message.appendTo($group);
|
$message.appendTo($group);
|
||||||
}
|
}
|
||||||
$check.appendTo($container);
|
//$check.appendTo($container);
|
||||||
$label.appendTo($container);
|
$label.appendTo($container);
|
||||||
$group.appendTo($col);
|
$group.appendTo($col);
|
||||||
$col.appendTo($container);
|
$col.appendTo($container);
|
||||||
@ -523,6 +546,8 @@
|
|||||||
preview();
|
preview();
|
||||||
bindImageUploaderFiles();
|
bindImageUploaderFiles();
|
||||||
bindCropper();
|
bindCropper();
|
||||||
|
|
||||||
|
$('.loadingScreen').addClass("hidden");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -530,8 +555,12 @@
|
|||||||
function preview() {
|
function preview() {
|
||||||
$('.previews').html('<h5 class="bg-info" >Loading</h5>');
|
$('.previews').html('<h5 class="bg-info" >Loading</h5>');
|
||||||
var arr = $("#customerForm").serializeArray();
|
var arr = $("#customerForm").serializeArray();
|
||||||
$.each($("input:checkbox:not(:checked)"), function(i, e) {
|
$.each($("input:checkbox"), function(i, e) {
|
||||||
arr.push({name: e.name, value: "0"});
|
if(!$(this).is(':checked')) {
|
||||||
|
arr.push({name: e.name, value: "0"});
|
||||||
|
}else{
|
||||||
|
arr.push({name: e.name, value: "1"});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var cont = "";
|
var cont = "";
|
||||||
|
|||||||
@ -36,6 +36,18 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body class="w-screen h-screen flex flex-col">
|
<body class="w-screen h-screen flex flex-col">
|
||||||
|
<div class="absolute bg-white bg-opacity-60 z-10 h-full w-full flex items-center justify-center loadingScreen" >
|
||||||
|
<div class="flex items-center">
|
||||||
|
<span class="text-3xl mr-4">Loading</span>
|
||||||
|
<svg class="animate-spin h-8 w-8 text-gray-800" xmlns="http://www.w3.org/2000/svg" fill="none"
|
||||||
|
viewBox="0 0 24 24">
|
||||||
|
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
||||||
|
<path class="opacity-75" fill="currentColor"
|
||||||
|
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
|
||||||
|
</path>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="w-screen h-screen flex flex-col">
|
<div class="w-screen h-screen flex flex-col">
|
||||||
<div class="flex flex-row bg-gray-100 sticky top-0 mb-2 p-1">
|
<div class="flex flex-row bg-gray-100 sticky top-0 mb-2 p-1">
|
||||||
<a class="basis-1/3 pl-1 font-bold text-2xl">{{ product.title }}</a>
|
<a class="basis-1/3 pl-1 font-bold text-2xl">{{ product.title }}</a>
|
||||||
@ -479,6 +491,7 @@
|
|||||||
preview();
|
preview();
|
||||||
bindImageUploaderFiles();
|
bindImageUploaderFiles();
|
||||||
bindCropper();
|
bindCropper();
|
||||||
|
$('.loadingScreen').addClass("hidden");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,6 +36,18 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body class="w-screen h-screen flex flex-col">
|
<body class="w-screen h-screen flex flex-col">
|
||||||
|
<div class="absolute bg-white bg-opacity-60 z-10 h-full w-full flex items-center justify-center loadingScreen" >
|
||||||
|
<div class="flex items-center">
|
||||||
|
<span class="text-3xl mr-4">Loading</span>
|
||||||
|
<svg class="animate-spin h-8 w-8 text-gray-800" xmlns="http://www.w3.org/2000/svg" fill="none"
|
||||||
|
viewBox="0 0 24 24">
|
||||||
|
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
||||||
|
<path class="opacity-75" fill="currentColor"
|
||||||
|
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
|
||||||
|
</path>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="w-screen h-screen flex flex-col">
|
<div class="w-screen h-screen flex flex-col">
|
||||||
<div class="flex flex-row bg-gray-100 sticky top-0 mb-2 p-1">
|
<div class="flex flex-row bg-gray-100 sticky top-0 mb-2 p-1">
|
||||||
<a class="basis-1/3 pl-1 font-bold text-2xl">{{ product.title }}</a>
|
<a class="basis-1/3 pl-1 font-bold text-2xl">{{ product.title }}</a>
|
||||||
@ -108,8 +120,12 @@
|
|||||||
dataType: "json",
|
dataType: "json",
|
||||||
success: function (result) {
|
success: function (result) {
|
||||||
var arr = $("#customerForm").serializeArray();
|
var arr = $("#customerForm").serializeArray();
|
||||||
$.each($("input:checkbox:not(:checked)"), function(i, e) {
|
$.each($("input:checkbox"), function(i, e) {
|
||||||
arr.push({name: e.name, value: "0"});
|
if(!$(this).is(':checked')) {
|
||||||
|
arr.push({name: e.name, value: "0"});
|
||||||
|
}else{
|
||||||
|
arr.push({name: e.name, value: "1"});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -432,7 +448,7 @@
|
|||||||
var $group = $('<div class="input-group input-group-sm"></div>');
|
var $group = $('<div class="input-group input-group-sm"></div>');
|
||||||
}
|
}
|
||||||
var $groupText = $('<div class="input-group-text"></div>');
|
var $groupText = $('<div class="input-group-text"></div>');
|
||||||
var $check = $('<input class="form-check-input mt-0" type="hidden" name="data[' + element.id + '][enable]" value="1">');
|
var $check = $('<input class="form-check-input mt-0" type="hidden" name="data[' + element.id + '][enable]" value="0">');
|
||||||
|
|
||||||
var $message = $('<div class="required hidden text-lime-700">Ist ein Pflichfeld </div>');
|
var $message = $('<div class="required hidden text-lime-700">Ist ein Pflichfeld </div>');
|
||||||
|
|
||||||
@ -440,7 +456,7 @@
|
|||||||
if(element.required) {
|
if(element.required) {
|
||||||
$message.appendTo($group);
|
$message.appendTo($group);
|
||||||
}
|
}
|
||||||
$check.appendTo($container);
|
// $check.appendTo($container);
|
||||||
$label.appendTo($container);
|
$label.appendTo($container);
|
||||||
$group.appendTo($col);
|
$group.appendTo($col);
|
||||||
$col.appendTo($container);
|
$col.appendTo($container);
|
||||||
@ -479,6 +495,7 @@
|
|||||||
preview();
|
preview();
|
||||||
bindImageUploaderFiles();
|
bindImageUploaderFiles();
|
||||||
bindCropper();
|
bindCropper();
|
||||||
|
$('.loadingScreen').addClass("hidden");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -486,8 +503,12 @@
|
|||||||
function preview() {
|
function preview() {
|
||||||
$('.previews').html('<h5 class="bg-info" >Loading</h5>');
|
$('.previews').html('<h5 class="bg-info" >Loading</h5>');
|
||||||
var arr = $("#customerForm").serializeArray();
|
var arr = $("#customerForm").serializeArray();
|
||||||
$.each($("input:checkbox:not(:checked)"), function(i, e) {
|
$.each($("input:checkbox"), function(i, e) {
|
||||||
arr.push({name: e.name, value: "0"});
|
if(!$(this).is(':checked')) {
|
||||||
|
arr.push({name: e.name, value: "0"});
|
||||||
|
}else{
|
||||||
|
arr.push({name: e.name, value: "1"});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var cont = "";
|
var cont = "";
|
||||||
|
|||||||
@ -27,6 +27,8 @@ class StartController extends AbstractController
|
|||||||
#[Route('/start/{id}', name: 'plugin_custom_psc_formular_frontend_start')]
|
#[Route('/start/{id}', name: 'plugin_custom_psc_formular_frontend_start')]
|
||||||
public function startAction(Request $request, string $id)
|
public function startAction(Request $request, string $id)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
$selectedShop = $this->shopService->getShopByDomain();
|
$selectedShop = $this->shopService->getShopByDomain();
|
||||||
|
|
||||||
$shopDoc = $this->shopService->getMongoShopByDomain();
|
$shopDoc = $this->shopService->getMongoShopByDomain();
|
||||||
@ -44,6 +46,10 @@ class StartController extends AbstractController
|
|||||||
$web2mailreCaptchawebcode = $formular->getReCaptchawebcode();
|
$web2mailreCaptchawebcode = $formular->getReCaptchawebcode();
|
||||||
$web2mailreCaptchasecret = $formular->getReCaptchasecret();
|
$web2mailreCaptchasecret = $formular->getReCaptchasecret();
|
||||||
|
|
||||||
|
if($formular->isPrivate() && $this->getUser() == null) {
|
||||||
|
return $this->redirect('/');
|
||||||
|
}
|
||||||
|
|
||||||
$web2maileditor = $formular->getEditor();
|
$web2maileditor = $formular->getEditor();
|
||||||
|
|
||||||
$send = false;
|
$send = false;
|
||||||
|
|||||||
@ -31,6 +31,9 @@ class Formular
|
|||||||
#[Field(type: 'string')]
|
#[Field(type: 'string')]
|
||||||
private $formularname;
|
private $formularname;
|
||||||
|
|
||||||
|
#[Field(type: 'boolean')]
|
||||||
|
private bool $private = false;
|
||||||
|
|
||||||
#[Field(type: 'boolean')]
|
#[Field(type: 'boolean')]
|
||||||
private $reCaptcha;
|
private $reCaptcha;
|
||||||
|
|
||||||
@ -55,6 +58,7 @@ class Formular
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->captcha = true;
|
$this->captcha = true;
|
||||||
|
$this->private = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -211,4 +215,14 @@ class Formular
|
|||||||
$this->captchaFox = $captchaFox;
|
$this->captchaFox = $captchaFox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isPrivate(): bool
|
||||||
|
{
|
||||||
|
return (bool)$this->private;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPrivate(bool $private): void
|
||||||
|
{
|
||||||
|
$this->private = $private;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -49,6 +49,10 @@ class Formular extends AbstractType
|
|||||||
'label' => 'Formularname',
|
'label' => 'Formularname',
|
||||||
'required' => false,
|
'required' => false,
|
||||||
));
|
));
|
||||||
|
$builder->add('private', CheckboxType::class, array(
|
||||||
|
'label' => 'Nur für Angemeldete Nutzer',
|
||||||
|
'required' => false
|
||||||
|
));
|
||||||
$builder->add('captcha', CheckboxType::class, array(
|
$builder->add('captcha', CheckboxType::class, array(
|
||||||
'label' => 'Captcha nutzen (nach DSGVO)?',
|
'label' => 'Captcha nutzen (nach DSGVO)?',
|
||||||
'required' => false
|
'required' => false
|
||||||
|
|||||||
@ -33,6 +33,18 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-2">
|
||||||
|
<div class="form-group row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{{ form_label(form.private ) }}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-12">
|
||||||
|
{{ form_widget(form.private) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
|
|||||||
@ -33,6 +33,18 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-2">
|
||||||
|
<div class="form-group row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{{ form_label(form.private ) }}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-12">
|
||||||
|
{{ form_widget(form.private) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
|
|||||||
@ -72,7 +72,7 @@ class BackendFields extends \PSC\System\PluginBundle\Form\Field implements Field
|
|||||||
$builder
|
$builder
|
||||||
->add('uploadPitchprint', CheckboxType::class, ['required' => false, 'label' => 'Aktivieren'])
|
->add('uploadPitchprint', CheckboxType::class, ['required' => false, 'label' => 'Aktivieren'])
|
||||||
->add("uploadPitchprintInitalStatus", ChoiceType::class, array(
|
->add("uploadPitchprintInitalStatus", ChoiceType::class, array(
|
||||||
'label' => 'Status',
|
'label' => 'Initalstatus',
|
||||||
'choices' => $this->statusService->getPositionStatusAsArray(),
|
'choices' => $this->statusService->getPositionStatusAsArray(),
|
||||||
'translation_domain' => 'posstatus'
|
'translation_domain' => 'posstatus'
|
||||||
))
|
))
|
||||||
|
|||||||
@ -36,7 +36,7 @@
|
|||||||
parent.document.getElementById('product_pitchprint_uploadPitchprintDesignId').value = id;
|
parent.document.getElementById('product_pitchprint_uploadPitchprintDesignId').value = id;
|
||||||
parent.document.getElementById('product_pitchprint_uploadPitchprintDesignPreviews').value = previews;
|
parent.document.getElementById('product_pitchprint_uploadPitchprintDesignPreviews').value = previews;
|
||||||
var useDesignModal = parent.document.getElementById('useDesign');
|
var useDesignModal = parent.document.getElementById('useDesign');
|
||||||
parent.loadChoosenDesign();
|
parent.loadChoosenDesign1();
|
||||||
parent.$(useDesignModal).modal('hide');
|
parent.$(useDesignModal).modal('hide');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<script>
|
<script>
|
||||||
function loadChoosenDesign() {
|
function loadChoosenDesign1() {
|
||||||
if($("#product_pitchprint_uploadPitchprintDesignPreviews").val() != "") {
|
if($("#product_pitchprint_uploadPitchprintDesignPreviews").val() != "") {
|
||||||
$(".chooseDesignPreview").html('<img src="' + $("#product_pitchprint_uploadPitchprintDesignPreviews").val().split(';')[0] + '" style="max-height: 200px;" />');
|
$(".chooseDesignPreview").html('<img src="' + $("#product_pitchprint_uploadPitchprintDesignPreviews").val().split(';')[0] + '" style="max-height: 200px;" />');
|
||||||
}
|
}
|
||||||
@ -61,5 +61,7 @@ Designauswahl
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
window.onload = function() {loadChoosenDesign()};
|
document.addEventListener("DOMContentLoaded", (event) => {
|
||||||
|
loadChoosenDesign1()
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -37,7 +37,7 @@ class ProductSettings extends \PSC\System\PluginBundle\Form\Field implements Fie
|
|||||||
$builder
|
$builder
|
||||||
->add('uploadPrintess', CheckboxType::class, ['required' => false, 'label' => 'Aktivieren'])
|
->add('uploadPrintess', CheckboxType::class, ['required' => false, 'label' => 'Aktivieren'])
|
||||||
->add("uploadPrintessInitalStatus", ChoiceType::class, array(
|
->add("uploadPrintessInitalStatus", ChoiceType::class, array(
|
||||||
'label' => 'Status',
|
'label' => 'Initalstatus',
|
||||||
'choices' => $this->statusService->getPositionStatusAsArray(),
|
'choices' => $this->statusService->getPositionStatusAsArray(),
|
||||||
'translation_domain' => 'posstatus'
|
'translation_domain' => 'posstatus'
|
||||||
))
|
))
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-7">
|
<div class="col-md-4">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
{{ form_label(form.printess.uploadPrintessInitalStatus) }}
|
{{ form_label(form.printess.uploadPrintessInitalStatus) }}
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
@ -20,7 +20,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-md-3">
|
||||||
|
<div class="form-group row">
|
||||||
|
{{ form_label(form.printess.uploadPrintessDownload) }}
|
||||||
|
<div class="col-md-8">
|
||||||
|
{{ form_widget(form.printess.uploadPrintessDownload) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
@ -32,14 +40,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3">
|
|
||||||
<div class="form-group row">
|
|
||||||
{{ form_label(form.printess.uploadPrintessDownload) }}
|
|
||||||
<div class="col-md-8">
|
|
||||||
{{ form_widget(form.printess.uploadPrintessDownload) }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -8,7 +8,7 @@ use function array_merge;
|
|||||||
|
|
||||||
abstract class Base {
|
abstract class Base {
|
||||||
|
|
||||||
private string $apiUrl = 'https://api.print.app/runtime/';
|
private string $apiUrl = 'https://api.print.app/v1/';
|
||||||
|
|
||||||
private Shop $shopService;
|
private Shop $shopService;
|
||||||
protected HttpClientInterface $httpClient;
|
protected HttpClientInterface $httpClient;
|
||||||
@ -21,7 +21,7 @@ abstract class Base {
|
|||||||
|
|
||||||
protected function makeGetCall(string $url): array
|
protected function makeGetCall(string $url): array
|
||||||
{
|
{
|
||||||
$response = $this->httpClient->request('GET', $this->apiUrl . $url, ['headers' => ['Authorization' => $this->shopService->getMongoSelectedShop()->getPluginSettingModule('pitchprint_r2', 'authKey')]]);
|
$response = $this->httpClient->request('GET', $this->apiUrl . $url, ['headers' => ['Authorization' => 'Bearer ' .$this->shopService->getMongoSelectedShop()->getPluginSettingModule('pitchprint_r2', 'authKey')]]);
|
||||||
|
|
||||||
if($response->getStatusCode() == 200) {
|
if($response->getStatusCode() == 200) {
|
||||||
return $response->toArray();
|
return $response->toArray();
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
* @license Private
|
* @license Private
|
||||||
* @link http://www.printshopcreator.de
|
* @link http://www.printshopcreator.de
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Plugin\Custom\PSC\R2_Pitchprint\Controller\Backend;
|
namespace Plugin\Custom\PSC\R2_Pitchprint\Controller\Backend;
|
||||||
|
|
||||||
use Doctrine\ODM\MongoDB\DocumentManager;
|
use Doctrine\ODM\MongoDB\DocumentManager;
|
||||||
@ -22,6 +23,10 @@ use Symfony\Component\Routing\Annotation\Route;
|
|||||||
|
|
||||||
class DesignController extends AbstractController
|
class DesignController extends AbstractController
|
||||||
{
|
{
|
||||||
|
public function __construct(private Design $designService)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#[Template()]
|
#[Template()]
|
||||||
#[Route('/design/edit/{uuid}/{folder}', name: 'psc_plugin_pitchprint_r2_backend_design_edit')]
|
#[Route('/design/edit/{uuid}/{folder}', name: 'psc_plugin_pitchprint_r2_backend_design_edit')]
|
||||||
public function editAction(Request $request, \PSC\System\SettingsBundle\Service\Shop $shopService, DocumentManager $documentManager, EntityManagerInterface $entityManager, Design $design, $uuid, $folder = "")
|
public function editAction(Request $request, \PSC\System\SettingsBundle\Service\Shop $shopService, DocumentManager $documentManager, EntityManagerInterface $entityManager, Design $design, $uuid, $folder = "")
|
||||||
@ -35,11 +40,16 @@ class DesignController extends AbstractController
|
|||||||
|
|
||||||
$output = $design->getDesigns($folder);
|
$output = $design->getDesigns($folder);
|
||||||
|
|
||||||
$data = [];
|
$data = ['folders' => [], 'designs' => []];
|
||||||
if(isset($output['data']) && isset($output['data']['id']) && $output['data']['id'] == 'root') {
|
if (isset($output['root']) && isset($output['root']['id']) && $output['root']['id'] == 'root') {
|
||||||
$data = $output['data']['items'];
|
foreach ($output['root']['items'] as $item) {
|
||||||
}else{
|
$data = $this->getItems($data, $item);
|
||||||
$data = $output['data'];
|
}
|
||||||
|
}
|
||||||
|
if (isset($output['data'])) {
|
||||||
|
foreach ($output['data']['items'] as $item) {
|
||||||
|
$data = $this->getItems($data, $item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
@ -48,4 +58,17 @@ class DesignController extends AbstractController
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getItems($data, $folder): array
|
||||||
|
{
|
||||||
|
$itemResult = $this->designService->getDesigns($folder);
|
||||||
|
if (isset($itemResult['data']['unit'])) {
|
||||||
|
$data['designs'][] = $itemResult['data'];
|
||||||
|
}
|
||||||
|
if (!isset($itemResult['data']['unit']) && isset($itemResult['data']['items'])) {
|
||||||
|
$data['folders'][] = $itemResult['data'];
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,12 +34,12 @@ class BackendFields extends \PSC\System\PluginBundle\Form\Field implements Field
|
|||||||
$builder
|
$builder
|
||||||
->add('uploadPitchprint', CheckboxType::class, ['required' => false, 'label' => 'Aktivieren'])
|
->add('uploadPitchprint', CheckboxType::class, ['required' => false, 'label' => 'Aktivieren'])
|
||||||
->add("uploadPitchprintInitalStatus", ChoiceType::class, array(
|
->add("uploadPitchprintInitalStatus", ChoiceType::class, array(
|
||||||
'label' => 'Status',
|
'label' => 'Initalstatus',
|
||||||
'choices' => $this->statusService->getPositionStatusAsArray(),
|
'choices' => $this->statusService->getPositionStatusAsArray(),
|
||||||
'translation_domain' => 'posstatus'
|
'translation_domain' => 'posstatus'
|
||||||
))
|
))
|
||||||
->add('uploadPitchprintDownload', CheckboxType::class, ['required' => false, 'label' => 'Download'])
|
->add('uploadPitchprintDownload', CheckboxType::class, ['required' => false, 'label' => 'Download'])
|
||||||
->add('uploadPitchprintDesignId', HiddenType::class)
|
->add('uploadPitchprintDesignId', TextType::class, ['label' => 'Design', 'required' => false])
|
||||||
->add('uploadPitchprintDesignPreviews', HiddenType::class);
|
->add('uploadPitchprintDesignPreviews', HiddenType::class);
|
||||||
|
|
||||||
return $builder;
|
return $builder;
|
||||||
|
|||||||
@ -2,31 +2,29 @@
|
|||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% for design in designs %}
|
{% for design in designs.folders %}
|
||||||
{% if design.items is defined %}
|
<div class="col-1 m-2">
|
||||||
<div class="col-1 m-2">
|
<div class="card h-100">
|
||||||
<div class="card h-100">
|
<div class="card-body">
|
||||||
<div class="card-body">
|
<h6 class="card-title">Folder {{design.title}}</h6>
|
||||||
<h6 class="card-title">Folder {{design.title}}</h6>
|
<a href="{{ path('psc_plugin_pitchprint_r2_backend_design_edit', {uuid: product.uuid, folder: design.id}) }}">{{ design.title }}</a>
|
||||||
<a href="{{ path('psc_plugin_pitchprint_r2_backend_design_edit', {uuid: product.uuid, folder: design.id}) }}">{{ design.title }}</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<div class="col-1 m-2">
|
|
||||||
<div class="card h-100">
|
|
||||||
<img src="{{ design.pages[0]['preview'] }}" class="card-img-top">
|
|
||||||
<div class="card-body">
|
|
||||||
<h6 class="card-title">{{design.title}} title</h6>
|
|
||||||
<button type="button" onClick="choose('{{design.id}}', '{{ design.pages[0]['preview']|join(';')}}')" class="btn btn-sm btn-primary">Benutzen</button>
|
|
||||||
</div>
|
|
||||||
<div class="card-footer">
|
|
||||||
<small class="text-muted">Last updated {{design.modified|date("H:i:s d.m.Y")}}</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% for design in designs.designs %}
|
||||||
|
<div class="col-1 m-2">
|
||||||
|
<div class="card h-100">
|
||||||
|
<img src="{{ design.pages[0]['preview'] }}" class="card-img-top">
|
||||||
|
<div class="card-body">
|
||||||
|
<h6 class="card-title">{{design.title}} title</h6>
|
||||||
|
<button type="button" onClick="choose('{{design.id}}', '{{ design.pages[0]['preview']|join(';')}}')" class="btn btn-sm btn-primary">Benutzen</button>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer">
|
||||||
|
<small class="text-muted">Last updated {{design.modified|date("H:i:s d.m.Y")}}</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
@ -35,7 +33,7 @@
|
|||||||
parent.document.getElementById('product_pitchprint_r2_uploadPitchprintDesignId').value = id;
|
parent.document.getElementById('product_pitchprint_r2_uploadPitchprintDesignId').value = id;
|
||||||
parent.document.getElementById('product_pitchprint_r2_uploadPitchprintDesignPreviews').value = previews;
|
parent.document.getElementById('product_pitchprint_r2_uploadPitchprintDesignPreviews').value = previews;
|
||||||
var useDesignModal = parent.document.getElementById('useDesignR2');
|
var useDesignModal = parent.document.getElementById('useDesignR2');
|
||||||
parent.loadChoosenDesign();
|
parent.loadChoosenDesign2();
|
||||||
parent.$(useDesignModal).modal('hide');
|
parent.$(useDesignModal).modal('hide');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<script>
|
<script>
|
||||||
function loadChoosenDesign() {
|
function loadChoosenDesign2() {
|
||||||
if($("#product_pitchprint_r2_uploadPitchprintDesignPreviews").val() != "") {
|
if($("#product_pitchprint_r2_uploadPitchprintDesignPreviews").val() != "") {
|
||||||
$(".chooseDesignPreviewR2").html('<img src="' + $("#product_pitchprint_r2_uploadPitchprintDesignPreviews").val().split(';')[0] + '" style="max-height: 200px;" />');
|
$(".chooseDesignPreviewR2").html('<img src="' + $("#product_pitchprint_r2_uploadPitchprintDesignPreviews").val().split(';')[0] + '" style="max-height: 200px;" />');
|
||||||
}
|
}
|
||||||
@ -38,14 +38,25 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{{form_widget(form.pitchprint_r2.uploadPitchprintDesignId)}}
|
<div class="col-12">
|
||||||
|
<div class="form-group row">
|
||||||
|
{{ form_label(form.pitchprint_r2.uploadPitchprintDesignId) }}
|
||||||
|
<div class="col-md-8">
|
||||||
|
{{form_widget(form.pitchprint_r2.uploadPitchprintDesignId)}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mt-1">
|
||||||
|
|
||||||
{{form_widget(form.pitchprint_r2.uploadPitchprintDesignPreviews)}}
|
{{form_widget(form.pitchprint_r2.uploadPitchprintDesignPreviews)}}
|
||||||
<div class="col-md-4">
|
<div class="col-2">
|
||||||
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#useDesignR2">
|
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#useDesignR2">
|
||||||
Designauswahl
|
Designauswahl
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-4">
|
||||||
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<div class="chooseDesignPreviewR2"></div>
|
<div class="chooseDesignPreviewR2"></div>
|
||||||
</div>
|
</div>
|
||||||
@ -66,5 +77,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
window.onload = function() {loadChoosenDesign()};
|
document.addEventListener("DOMContentLoaded", (event) => {
|
||||||
|
loadChoosenDesign2()
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -33,6 +33,7 @@ class PutConfig extends Base
|
|||||||
|
|
||||||
$result = $this->put(sprintf("config/%s/%s/configurations", $this->customerNumber, $this->getProductId()), $this->buildData());
|
$result = $this->put(sprintf("config/%s/%s/configurations", $this->customerNumber, $this->getProductId()), $this->buildData());
|
||||||
|
|
||||||
|
var_dump($result);
|
||||||
$tmp = ['property' => [], 'custom' => []];
|
$tmp = ['property' => [], 'custom' => []];
|
||||||
|
|
||||||
foreach($result['ValidOptions'] as $key => $value) {
|
foreach($result['ValidOptions'] as $key => $value) {
|
||||||
|
|||||||
@ -7,7 +7,6 @@ use Doctrine\ORM\EntityManagerInterface;
|
|||||||
use Plugin\Custom\PSC\Saxoprint_API_R1\Api\GetConfig;
|
use Plugin\Custom\PSC\Saxoprint_API_R1\Api\GetConfig;
|
||||||
use Plugin\Custom\PSC\Saxoprint_API_R1\Api\GetPrice;
|
use Plugin\Custom\PSC\Saxoprint_API_R1\Api\GetPrice;
|
||||||
use Plugin\Custom\PSC\Saxoprint_API_R1\Api\GetPrices;
|
use Plugin\Custom\PSC\Saxoprint_API_R1\Api\GetPrices;
|
||||||
|
|
||||||
use Plugin\Custom\PSC\Saxoprint_API_R1\Api\PutConfig;
|
use Plugin\Custom\PSC\Saxoprint_API_R1\Api\PutConfig;
|
||||||
use PSC\Shop\EntityBundle\Entity\Product;
|
use PSC\Shop\EntityBundle\Entity\Product;
|
||||||
use PSC\System\SettingsBundle\Service\Help;
|
use PSC\System\SettingsBundle\Service\Help;
|
||||||
@ -15,7 +14,6 @@ use PSC\System\SettingsBundle\Service\Shop;
|
|||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Annotation\Route;
|
||||||
use Symfony\Component\Security\Core\Security;
|
use Symfony\Component\Security\Core\Security;
|
||||||
@ -98,29 +96,29 @@ class SaxoprintController extends AbstractController
|
|||||||
$putConfig->setProductId((int)$request->get('saxoprintProductId'));
|
$putConfig->setProductId((int)$request->get('saxoprintProductId'));
|
||||||
|
|
||||||
$disabledValues = [];
|
$disabledValues = [];
|
||||||
if($productDoc->getPluginSettingModule('saxoprint', 'config')) {
|
if ($productDoc->getPluginSettingModule('saxoprint', 'config')) {
|
||||||
$disabledValues = json_decode($productDoc->getPluginSettingModule('saxoprint', 'config'), true);
|
$disabledValues = json_decode($productDoc->getPluginSettingModule('saxoprint', 'config'), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!empty($reqConfig)) {
|
if (!empty($reqConfig)) {
|
||||||
$putConfig->setConfig($reqConfig);
|
$putConfig->setConfig($reqConfig);
|
||||||
$config = $putConfig->call();
|
$config = $putConfig->call();
|
||||||
} else {
|
} else {
|
||||||
$config = $getConfig->call();
|
$config = $getConfig->call();
|
||||||
foreach($config['property'] as $item) {
|
foreach ($config['property'] as $item) {
|
||||||
if($item['defaultValue'] != null) {
|
if ($item['defaultValue'] != null) {
|
||||||
$reqConfig['property'][$item['id']] = $item['defaultValue'];
|
$reqConfig['property'][$item['id']] = $item['defaultValue'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach($config['custom'] as $item) {
|
foreach ($config['custom'] as $item) {
|
||||||
if($item['defaultValue'] != null) {
|
if ($item['defaultValue'] != null) {
|
||||||
$reqConfig['custom'][$item['id']] = $item['defaultValue'];
|
$reqConfig['custom'][$item['id']] = $item['defaultValue'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
foreach($disabledValues as $value) {
|
foreach ($disabledValues as $value) {
|
||||||
if($value['id'] != 'auflage' && $value['id'] != 102) {
|
if ($value['id'] != 'auflage' && $value['id'] != 102) {
|
||||||
$reqConfig['property'][$value['id']] = $value['value'];
|
$reqConfig['property'][$value['id']] = $value['value'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,7 +126,8 @@ class SaxoprintController extends AbstractController
|
|||||||
$putConfig->setConfig($reqConfig);
|
$putConfig->setConfig($reqConfig);
|
||||||
$config = $putConfig->call();
|
$config = $putConfig->call();
|
||||||
}
|
}
|
||||||
|
var_dump($config);
|
||||||
|
die();
|
||||||
|
|
||||||
$getPrices->setShop($shop->getMongoShopByUid($product->getShop()->getUid()));
|
$getPrices->setShop($shop->getMongoShopByUid($product->getShop()->getUid()));
|
||||||
$getPrices->setProductId((int)$request->get('saxoprintProductId'));
|
$getPrices->setProductId((int)$request->get('saxoprintProductId'));
|
||||||
@ -137,23 +136,23 @@ class SaxoprintController extends AbstractController
|
|||||||
|
|
||||||
$disabledConfig = [];
|
$disabledConfig = [];
|
||||||
|
|
||||||
foreach($config['property'] as $item) {
|
foreach ($config['property'] as $item) {
|
||||||
if($item['defaultValue'] != null) {
|
if ($item['defaultValue'] != null) {
|
||||||
$tmpConfig['property'][$item['id']] = $item['defaultValue'];
|
$tmpConfig['property'][$item['id']] = $item['defaultValue'];
|
||||||
}
|
}
|
||||||
$disabledValue = array_filter(
|
$disabledValue = array_filter(
|
||||||
$disabledValues,
|
$disabledValues,
|
||||||
function ($y) use ($item) {
|
function ($y) use ($item) {
|
||||||
if($item['id'] == $y['id']) {
|
if ($item['id'] == $y['id']) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if(count($disabledValue) > 0) {
|
if (count($disabledValue) > 0) {
|
||||||
$desItem = array_pop($disabledValue);
|
$desItem = array_pop($disabledValue);
|
||||||
if($desItem['value'] != null && count($item['values']) > 0) {
|
if ($desItem['value'] != null && count($item['values']) > 0) {
|
||||||
$item['disabled'] = true;
|
$item['disabled'] = true;
|
||||||
$item['defaultValue'] = $desItem['value'];
|
$item['defaultValue'] = $desItem['value'];
|
||||||
$tmpConfig['property'][$item['id']] = $item['defaultValue'];
|
$tmpConfig['property'][$item['id']] = $item['defaultValue'];
|
||||||
@ -166,23 +165,23 @@ class SaxoprintController extends AbstractController
|
|||||||
|
|
||||||
$disabledConfig[] = $item;
|
$disabledConfig[] = $item;
|
||||||
}
|
}
|
||||||
foreach($config['custom'] as $item) {
|
foreach ($config['custom'] as $item) {
|
||||||
if($item['defaultValue'] != null) {
|
if ($item['defaultValue'] != null) {
|
||||||
$tmpConfig['custom'][$item['id']] = $item['defaultValue'];
|
$tmpConfig['custom'][$item['id']] = $item['defaultValue'];
|
||||||
}
|
}
|
||||||
$disabledValue = array_filter(
|
$disabledValue = array_filter(
|
||||||
$disabledValues,
|
$disabledValues,
|
||||||
function ($y) use ($item) {
|
function ($y) use ($item) {
|
||||||
if($item['id'] == $y['id']) {
|
if ($item['id'] == $y['id']) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if(count($disabledValue) > 0) {
|
if (count($disabledValue) > 0) {
|
||||||
$desItem = array_pop($disabledValue);
|
$desItem = array_pop($disabledValue);
|
||||||
if($desItem['value'] != null) {
|
if ($desItem['value'] != null) {
|
||||||
$item['disabled'] = true;
|
$item['disabled'] = true;
|
||||||
$item['defaultValue'] = $desItem['value'];
|
$item['defaultValue'] = $desItem['value'];
|
||||||
$tmpConfig['custom'][$item['id']] = $item['defaultValue'];
|
$tmpConfig['custom'][$item['id']] = $item['defaultValue'];
|
||||||
@ -222,7 +221,7 @@ class SaxoprintController extends AbstractController
|
|||||||
$versandDisabled = array_filter(
|
$versandDisabled = array_filter(
|
||||||
$disabledValues,
|
$disabledValues,
|
||||||
function ($item) {
|
function ($item) {
|
||||||
if($item['id'] == 102) {
|
if ($item['id'] == 102) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -232,19 +231,19 @@ class SaxoprintController extends AbstractController
|
|||||||
$auflageDisabled = array_filter(
|
$auflageDisabled = array_filter(
|
||||||
$disabledValues,
|
$disabledValues,
|
||||||
function ($item) {
|
function ($item) {
|
||||||
if($item['id'] == 'auflage') {
|
if ($item['id'] == 'auflage') {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if(count($versandDisabled) == 1) {
|
if (count($versandDisabled) == 1) {
|
||||||
$versand['defaultValue'] = array_shift($versandDisabled)['value'];
|
$versand['defaultValue'] = array_shift($versandDisabled)['value'];
|
||||||
$versand['disabled'] = true;
|
$versand['disabled'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(count($auflageDisabled) == 1) {
|
if (count($auflageDisabled) == 1) {
|
||||||
$auflagen['defaultValue'] = array_shift($auflageDisabled)['value'];
|
$auflagen['defaultValue'] = array_shift($auflageDisabled)['value'];
|
||||||
$auflagen['disabled'] = true;
|
$auflagen['disabled'] = true;
|
||||||
}
|
}
|
||||||
@ -252,23 +251,23 @@ class SaxoprintController extends AbstractController
|
|||||||
|
|
||||||
$priceSum = 0;
|
$priceSum = 0;
|
||||||
|
|
||||||
foreach($prices as $price) {
|
foreach ($prices as $price) {
|
||||||
if($price['ProductionSpeedPropertyPropertyValue']['102'] == 1055) {
|
if ($price['ProductionSpeedPropertyPropertyValue']['102'] == 1055) {
|
||||||
$versand['values'][] = ['id' => 1055, 'label' => 'Standard'];
|
$versand['values'][] = ['id' => 1055, 'label' => 'Standard'];
|
||||||
}
|
}
|
||||||
if($price['ProductionSpeedPropertyPropertyValue']['102'] == 1056) {
|
if ($price['ProductionSpeedPropertyPropertyValue']['102'] == 1056) {
|
||||||
$versand['values'][] = ['id' => 1056, 'label' => 'Standard+'];
|
$versand['values'][] = ['id' => 1056, 'label' => 'Standard+'];
|
||||||
}
|
}
|
||||||
if($price['ProductionSpeedPropertyPropertyValue']['102'] == 1057) {
|
if ($price['ProductionSpeedPropertyPropertyValue']['102'] == 1057) {
|
||||||
$versand['values'][] = ['id' => 1057, 'label' => 'Express'];
|
$versand['values'][] = ['id' => 1057, 'label' => 'Express'];
|
||||||
}
|
}
|
||||||
if($price['ProductionSpeedPropertyPropertyValue']['102'] == 1058) {
|
if ($price['ProductionSpeedPropertyPropertyValue']['102'] == 1058) {
|
||||||
$versand['values'][] = ['id' => 1058, 'label' => 'Express'];
|
$versand['values'][] = ['id' => 1058, 'label' => 'Express'];
|
||||||
}
|
}
|
||||||
if($price['ProductionSpeedPropertyPropertyValue']['102'] == 1059) {
|
if ($price['ProductionSpeedPropertyPropertyValue']['102'] == 1059) {
|
||||||
$versand['values'][] = ['id' => 1059, 'label' => 'Overnight'];
|
$versand['values'][] = ['id' => 1059, 'label' => 'Overnight'];
|
||||||
}
|
}
|
||||||
if($versand['defaultValue'] == $price['ProductionSpeedPropertyPropertyValue']['102']) {
|
if ($versand['defaultValue'] == $price['ProductionSpeedPropertyPropertyValue']['102']) {
|
||||||
foreach ($price['CirculationPrice'] as $key => $preis) {
|
foreach ($price['CirculationPrice'] as $key => $preis) {
|
||||||
$auflagen['values'][] = ['id' => $key, 'label' => $key, 'price' => $preis];
|
$auflagen['values'][] = ['id' => $key, 'label' => $key, 'price' => $preis];
|
||||||
if ($auflagen['defaultValue'] == $key) {
|
if ($auflagen['defaultValue'] == $key) {
|
||||||
@ -278,7 +277,7 @@ class SaxoprintController extends AbstractController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($priceSum == 0) {
|
if ($priceSum == 0) {
|
||||||
$priceSum = $auflagen['values'][0]['price'];
|
$priceSum = $auflagen['values'][0]['price'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,10 +298,10 @@ class SaxoprintController extends AbstractController
|
|||||||
$sum = $sum + $aufschlagFix;
|
$sum = $sum + $aufschlagFix;
|
||||||
|
|
||||||
$tmp = [];
|
$tmp = [];
|
||||||
foreach($config as $conf) {
|
foreach ($config as $conf) {
|
||||||
if($help = $this->helpService->getHelp($conf['id'])) {
|
if ($help = $this->helpService->getHelp((string)$product->getUid(), $conf['id'])) {
|
||||||
$conf['help'] = $help->asArray();
|
$conf['help'] = $help->asArray();
|
||||||
}else{
|
} else {
|
||||||
$conf['help'] = false;
|
$conf['help'] = false;
|
||||||
}
|
}
|
||||||
$tmp[] = $conf;
|
$tmp[] = $conf;
|
||||||
@ -331,7 +330,7 @@ class SaxoprintController extends AbstractController
|
|||||||
#[Route('/storePrice', name: 'plugin_custom_psc_saxoprint_store_price')]
|
#[Route('/storePrice', name: 'plugin_custom_psc_saxoprint_store_price')]
|
||||||
public function storePrice(Request $request)
|
public function storePrice(Request $request)
|
||||||
{
|
{
|
||||||
if(isset($_SESSION['Basket']['TempProduct'][$request->get('productId')])) {
|
if (isset($_SESSION['Basket']['TempProduct'][$request->get('productId')])) {
|
||||||
/**
|
/**
|
||||||
* @var \TP_Basket_Item $basketItem
|
* @var \TP_Basket_Item $basketItem
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -5,17 +5,25 @@
|
|||||||
"npm:@types/react-dom@^18.3.0": "18.3.1",
|
"npm:@types/react-dom@^18.3.0": "18.3.1",
|
||||||
"npm:@types/react@^18.3.10": "18.3.11",
|
"npm:@types/react@^18.3.10": "18.3.11",
|
||||||
"npm:@vitejs/plugin-react@^4.3.2": "4.3.2_vite@5.4.8_@babel+core@7.25.8",
|
"npm:@vitejs/plugin-react@^4.3.2": "4.3.2_vite@5.4.8_@babel+core@7.25.8",
|
||||||
|
"npm:autoprefixer@^10.4.20": "10.4.20_postcss@8.4.47",
|
||||||
|
"npm:axios@^1.7.7": "1.7.7",
|
||||||
"npm:eslint-plugin-react-hooks@^5.1.0-rc.0": "5.1.0-rc-fb9a90fa48-20240614_eslint@9.12.0",
|
"npm:eslint-plugin-react-hooks@^5.1.0-rc.0": "5.1.0-rc-fb9a90fa48-20240614_eslint@9.12.0",
|
||||||
"npm:eslint-plugin-react-refresh@~0.4.12": "0.4.12_eslint@9.12.0",
|
"npm:eslint-plugin-react-refresh@~0.4.12": "0.4.12_eslint@9.12.0",
|
||||||
"npm:eslint@^9.11.1": "9.12.0",
|
"npm:eslint@^9.11.1": "9.12.0",
|
||||||
"npm:globals@^15.9.0": "15.11.0",
|
"npm:globals@^15.9.0": "15.11.0",
|
||||||
|
"npm:postcss@^8.4.47": "8.4.47",
|
||||||
"npm:react-dom@^18.3.1": "18.3.1_react@18.3.1",
|
"npm:react-dom@^18.3.1": "18.3.1_react@18.3.1",
|
||||||
|
"npm:react-router-dom@^6.27.0": "6.27.0_react@18.3.1_react-dom@18.3.1__react@18.3.1",
|
||||||
"npm:react@^18.3.1": "18.3.1",
|
"npm:react@^18.3.1": "18.3.1",
|
||||||
|
"npm:tailwindcss@^3.4.13": "3.4.13_postcss@8.4.47",
|
||||||
"npm:typescript-eslint@^8.7.0": "8.8.1_@typescript-eslint+parser@8.8.1__eslint@9.12.0__typescript@5.6.3_eslint@9.12.0_typescript@5.6.3",
|
"npm:typescript-eslint@^8.7.0": "8.8.1_@typescript-eslint+parser@8.8.1__eslint@9.12.0__typescript@5.6.3_eslint@9.12.0_typescript@5.6.3",
|
||||||
"npm:typescript@^5.5.3": "5.6.3",
|
"npm:typescript@^5.5.3": "5.6.3",
|
||||||
"npm:vite@^5.4.8": "5.4.8"
|
"npm:vite@^5.4.8": "5.4.8"
|
||||||
},
|
},
|
||||||
"npm": {
|
"npm": {
|
||||||
|
"@alloc/quick-lru@5.2.0": {
|
||||||
|
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="
|
||||||
|
},
|
||||||
"@ampproject/remapping@2.3.0": {
|
"@ampproject/remapping@2.3.0": {
|
||||||
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
|
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -68,7 +76,7 @@
|
|||||||
"@babel/compat-data",
|
"@babel/compat-data",
|
||||||
"@babel/helper-validator-option",
|
"@babel/helper-validator-option",
|
||||||
"browserslist",
|
"browserslist",
|
||||||
"lru-cache",
|
"lru-cache@5.1.1",
|
||||||
"semver@6.3.1"
|
"semver@6.3.1"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -304,6 +312,17 @@
|
|||||||
"@humanwhocodes/retry@0.3.1": {
|
"@humanwhocodes/retry@0.3.1": {
|
||||||
"integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="
|
"integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="
|
||||||
},
|
},
|
||||||
|
"@isaacs/cliui@8.0.2": {
|
||||||
|
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
|
||||||
|
"dependencies": [
|
||||||
|
"string-width@5.1.2",
|
||||||
|
"string-width-cjs@npm:string-width@4.2.3",
|
||||||
|
"strip-ansi@7.1.0",
|
||||||
|
"strip-ansi-cjs@npm:strip-ansi@6.0.1",
|
||||||
|
"wrap-ansi@8.1.0",
|
||||||
|
"wrap-ansi-cjs@npm:wrap-ansi@7.0.0"
|
||||||
|
]
|
||||||
|
},
|
||||||
"@jridgewell/gen-mapping@0.3.5": {
|
"@jridgewell/gen-mapping@0.3.5": {
|
||||||
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
|
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -345,6 +364,12 @@
|
|||||||
"fastq"
|
"fastq"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"@pkgjs/parseargs@0.11.0": {
|
||||||
|
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="
|
||||||
|
},
|
||||||
|
"@remix-run/router@1.20.0": {
|
||||||
|
"integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg=="
|
||||||
|
},
|
||||||
"@rollup/rollup-android-arm-eabi@4.24.0": {
|
"@rollup/rollup-android-arm-eabi@4.24.0": {
|
||||||
"integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA=="
|
"integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA=="
|
||||||
},
|
},
|
||||||
@ -549,6 +574,12 @@
|
|||||||
"uri-js"
|
"uri-js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"ansi-regex@5.0.1": {
|
||||||
|
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
|
||||||
|
},
|
||||||
|
"ansi-regex@6.1.0": {
|
||||||
|
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="
|
||||||
|
},
|
||||||
"ansi-styles@3.2.1": {
|
"ansi-styles@3.2.1": {
|
||||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -561,12 +592,54 @@
|
|||||||
"color-convert@2.0.1"
|
"color-convert@2.0.1"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"ansi-styles@6.2.1": {
|
||||||
|
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="
|
||||||
|
},
|
||||||
|
"any-promise@1.3.0": {
|
||||||
|
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
|
||||||
|
},
|
||||||
|
"anymatch@3.1.3": {
|
||||||
|
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
||||||
|
"dependencies": [
|
||||||
|
"normalize-path",
|
||||||
|
"picomatch"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"arg@5.0.2": {
|
||||||
|
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
|
||||||
|
},
|
||||||
"argparse@2.0.1": {
|
"argparse@2.0.1": {
|
||||||
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
|
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
|
||||||
},
|
},
|
||||||
|
"asynckit@0.4.0": {
|
||||||
|
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||||
|
},
|
||||||
|
"autoprefixer@10.4.20_postcss@8.4.47": {
|
||||||
|
"integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
|
||||||
|
"dependencies": [
|
||||||
|
"browserslist",
|
||||||
|
"caniuse-lite",
|
||||||
|
"fraction.js",
|
||||||
|
"normalize-range",
|
||||||
|
"picocolors",
|
||||||
|
"postcss",
|
||||||
|
"postcss-value-parser"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"axios@1.7.7": {
|
||||||
|
"integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
|
||||||
|
"dependencies": [
|
||||||
|
"follow-redirects",
|
||||||
|
"form-data",
|
||||||
|
"proxy-from-env"
|
||||||
|
]
|
||||||
|
},
|
||||||
"balanced-match@1.0.2": {
|
"balanced-match@1.0.2": {
|
||||||
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
||||||
},
|
},
|
||||||
|
"binary-extensions@2.3.0": {
|
||||||
|
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="
|
||||||
|
},
|
||||||
"brace-expansion@1.1.11": {
|
"brace-expansion@1.1.11": {
|
||||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -598,6 +671,9 @@
|
|||||||
"callsites@3.1.0": {
|
"callsites@3.1.0": {
|
||||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
|
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
|
||||||
},
|
},
|
||||||
|
"camelcase-css@2.0.1": {
|
||||||
|
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
|
||||||
|
},
|
||||||
"caniuse-lite@1.0.30001668": {
|
"caniuse-lite@1.0.30001668": {
|
||||||
"integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw=="
|
"integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw=="
|
||||||
},
|
},
|
||||||
@ -616,6 +692,19 @@
|
|||||||
"supports-color@7.2.0"
|
"supports-color@7.2.0"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"chokidar@3.6.0": {
|
||||||
|
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||||
|
"dependencies": [
|
||||||
|
"anymatch",
|
||||||
|
"braces",
|
||||||
|
"fsevents",
|
||||||
|
"glob-parent@5.1.2",
|
||||||
|
"is-binary-path",
|
||||||
|
"is-glob",
|
||||||
|
"normalize-path",
|
||||||
|
"readdirp"
|
||||||
|
]
|
||||||
|
},
|
||||||
"color-convert@1.9.3": {
|
"color-convert@1.9.3": {
|
||||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -634,6 +723,15 @@
|
|||||||
"color-name@1.1.4": {
|
"color-name@1.1.4": {
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||||
},
|
},
|
||||||
|
"combined-stream@1.0.8": {
|
||||||
|
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||||
|
"dependencies": [
|
||||||
|
"delayed-stream"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"commander@4.1.1": {
|
||||||
|
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
|
||||||
|
},
|
||||||
"concat-map@0.0.1": {
|
"concat-map@0.0.1": {
|
||||||
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
|
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
|
||||||
},
|
},
|
||||||
@ -648,6 +746,9 @@
|
|||||||
"which"
|
"which"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"cssesc@3.0.0": {
|
||||||
|
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
|
||||||
|
},
|
||||||
"csstype@3.1.3": {
|
"csstype@3.1.3": {
|
||||||
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
||||||
},
|
},
|
||||||
@ -660,9 +761,27 @@
|
|||||||
"deep-is@0.1.4": {
|
"deep-is@0.1.4": {
|
||||||
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
|
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
|
||||||
},
|
},
|
||||||
|
"delayed-stream@1.0.0": {
|
||||||
|
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
|
||||||
|
},
|
||||||
|
"didyoumean@1.2.2": {
|
||||||
|
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
|
||||||
|
},
|
||||||
|
"dlv@1.1.3": {
|
||||||
|
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
|
||||||
|
},
|
||||||
|
"eastasianwidth@0.2.0": {
|
||||||
|
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
|
||||||
|
},
|
||||||
"electron-to-chromium@1.5.36": {
|
"electron-to-chromium@1.5.36": {
|
||||||
"integrity": "sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw=="
|
"integrity": "sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw=="
|
||||||
},
|
},
|
||||||
|
"emoji-regex@8.0.0": {
|
||||||
|
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||||
|
},
|
||||||
|
"emoji-regex@9.2.2": {
|
||||||
|
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
|
||||||
|
},
|
||||||
"esbuild@0.21.5": {
|
"esbuild@0.21.5": {
|
||||||
"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
|
"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -845,9 +964,33 @@
|
|||||||
"flatted@3.3.1": {
|
"flatted@3.3.1": {
|
||||||
"integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw=="
|
"integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw=="
|
||||||
},
|
},
|
||||||
|
"follow-redirects@1.15.9": {
|
||||||
|
"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="
|
||||||
|
},
|
||||||
|
"foreground-child@3.3.0": {
|
||||||
|
"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
|
||||||
|
"dependencies": [
|
||||||
|
"cross-spawn",
|
||||||
|
"signal-exit"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"form-data@4.0.1": {
|
||||||
|
"integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
|
||||||
|
"dependencies": [
|
||||||
|
"asynckit",
|
||||||
|
"combined-stream",
|
||||||
|
"mime-types"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"fraction.js@4.3.7": {
|
||||||
|
"integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="
|
||||||
|
},
|
||||||
"fsevents@2.3.3": {
|
"fsevents@2.3.3": {
|
||||||
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="
|
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="
|
||||||
},
|
},
|
||||||
|
"function-bind@1.1.2": {
|
||||||
|
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
|
||||||
|
},
|
||||||
"gensync@1.0.0-beta.2": {
|
"gensync@1.0.0-beta.2": {
|
||||||
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
|
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
|
||||||
},
|
},
|
||||||
@ -863,6 +1006,17 @@
|
|||||||
"is-glob"
|
"is-glob"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"glob@10.4.5": {
|
||||||
|
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
|
||||||
|
"dependencies": [
|
||||||
|
"foreground-child",
|
||||||
|
"jackspeak",
|
||||||
|
"minimatch@9.0.5",
|
||||||
|
"minipass",
|
||||||
|
"package-json-from-dist",
|
||||||
|
"path-scurry"
|
||||||
|
]
|
||||||
|
},
|
||||||
"globals@11.12.0": {
|
"globals@11.12.0": {
|
||||||
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
|
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
|
||||||
},
|
},
|
||||||
@ -881,6 +1035,12 @@
|
|||||||
"has-flag@4.0.0": {
|
"has-flag@4.0.0": {
|
||||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||||
},
|
},
|
||||||
|
"hasown@2.0.2": {
|
||||||
|
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
||||||
|
"dependencies": [
|
||||||
|
"function-bind"
|
||||||
|
]
|
||||||
|
},
|
||||||
"ignore@5.3.2": {
|
"ignore@5.3.2": {
|
||||||
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="
|
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="
|
||||||
},
|
},
|
||||||
@ -894,9 +1054,24 @@
|
|||||||
"imurmurhash@0.1.4": {
|
"imurmurhash@0.1.4": {
|
||||||
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
|
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
|
||||||
},
|
},
|
||||||
|
"is-binary-path@2.1.0": {
|
||||||
|
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
||||||
|
"dependencies": [
|
||||||
|
"binary-extensions"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"is-core-module@2.15.1": {
|
||||||
|
"integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
|
||||||
|
"dependencies": [
|
||||||
|
"hasown"
|
||||||
|
]
|
||||||
|
},
|
||||||
"is-extglob@2.1.1": {
|
"is-extglob@2.1.1": {
|
||||||
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
|
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
|
||||||
},
|
},
|
||||||
|
"is-fullwidth-code-point@3.0.0": {
|
||||||
|
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
|
||||||
|
},
|
||||||
"is-glob@4.0.3": {
|
"is-glob@4.0.3": {
|
||||||
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -909,6 +1084,16 @@
|
|||||||
"isexe@2.0.0": {
|
"isexe@2.0.0": {
|
||||||
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
|
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
|
||||||
},
|
},
|
||||||
|
"jackspeak@3.4.3": {
|
||||||
|
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
|
||||||
|
"dependencies": [
|
||||||
|
"@isaacs/cliui",
|
||||||
|
"@pkgjs/parseargs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"jiti@1.21.6": {
|
||||||
|
"integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w=="
|
||||||
|
},
|
||||||
"js-tokens@4.0.0": {
|
"js-tokens@4.0.0": {
|
||||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
||||||
},
|
},
|
||||||
@ -946,6 +1131,15 @@
|
|||||||
"type-check"
|
"type-check"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"lilconfig@2.1.0": {
|
||||||
|
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
|
||||||
|
},
|
||||||
|
"lilconfig@3.1.2": {
|
||||||
|
"integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow=="
|
||||||
|
},
|
||||||
|
"lines-and-columns@1.2.4": {
|
||||||
|
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
|
||||||
|
},
|
||||||
"locate-path@6.0.0": {
|
"locate-path@6.0.0": {
|
||||||
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
|
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -961,6 +1155,9 @@
|
|||||||
"js-tokens"
|
"js-tokens"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"lru-cache@10.4.3": {
|
||||||
|
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
|
||||||
|
},
|
||||||
"lru-cache@5.1.1": {
|
"lru-cache@5.1.1": {
|
||||||
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
|
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -977,6 +1174,15 @@
|
|||||||
"picomatch"
|
"picomatch"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"mime-db@1.52.0": {
|
||||||
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
|
||||||
|
},
|
||||||
|
"mime-types@2.1.35": {
|
||||||
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
|
"dependencies": [
|
||||||
|
"mime-db"
|
||||||
|
]
|
||||||
|
},
|
||||||
"minimatch@3.1.2": {
|
"minimatch@3.1.2": {
|
||||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -989,9 +1195,20 @@
|
|||||||
"brace-expansion@2.0.1"
|
"brace-expansion@2.0.1"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"minipass@7.1.2": {
|
||||||
|
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="
|
||||||
|
},
|
||||||
"ms@2.1.3": {
|
"ms@2.1.3": {
|
||||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
},
|
},
|
||||||
|
"mz@2.7.0": {
|
||||||
|
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
|
||||||
|
"dependencies": [
|
||||||
|
"any-promise",
|
||||||
|
"object-assign",
|
||||||
|
"thenify-all"
|
||||||
|
]
|
||||||
|
},
|
||||||
"nanoid@3.3.7": {
|
"nanoid@3.3.7": {
|
||||||
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
|
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
|
||||||
},
|
},
|
||||||
@ -1001,6 +1218,18 @@
|
|||||||
"node-releases@2.0.18": {
|
"node-releases@2.0.18": {
|
||||||
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g=="
|
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g=="
|
||||||
},
|
},
|
||||||
|
"normalize-path@3.0.0": {
|
||||||
|
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
|
||||||
|
},
|
||||||
|
"normalize-range@0.1.2": {
|
||||||
|
"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="
|
||||||
|
},
|
||||||
|
"object-assign@4.1.1": {
|
||||||
|
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
|
||||||
|
},
|
||||||
|
"object-hash@3.0.0": {
|
||||||
|
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="
|
||||||
|
},
|
||||||
"optionator@0.9.4": {
|
"optionator@0.9.4": {
|
||||||
"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
|
"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -1024,6 +1253,9 @@
|
|||||||
"p-limit"
|
"p-limit"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"package-json-from-dist@1.0.1": {
|
||||||
|
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
|
||||||
|
},
|
||||||
"parent-module@1.0.1": {
|
"parent-module@1.0.1": {
|
||||||
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
|
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -1036,12 +1268,69 @@
|
|||||||
"path-key@3.1.1": {
|
"path-key@3.1.1": {
|
||||||
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
|
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
|
||||||
},
|
},
|
||||||
|
"path-parse@1.0.7": {
|
||||||
|
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
|
||||||
|
},
|
||||||
|
"path-scurry@1.11.1": {
|
||||||
|
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
|
||||||
|
"dependencies": [
|
||||||
|
"lru-cache@10.4.3",
|
||||||
|
"minipass"
|
||||||
|
]
|
||||||
|
},
|
||||||
"picocolors@1.1.0": {
|
"picocolors@1.1.0": {
|
||||||
"integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw=="
|
"integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw=="
|
||||||
},
|
},
|
||||||
"picomatch@2.3.1": {
|
"picomatch@2.3.1": {
|
||||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
|
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
|
||||||
},
|
},
|
||||||
|
"pify@2.3.0": {
|
||||||
|
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
|
||||||
|
},
|
||||||
|
"pirates@4.0.6": {
|
||||||
|
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg=="
|
||||||
|
},
|
||||||
|
"postcss-import@15.1.0_postcss@8.4.47": {
|
||||||
|
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
|
||||||
|
"dependencies": [
|
||||||
|
"postcss",
|
||||||
|
"postcss-value-parser",
|
||||||
|
"read-cache",
|
||||||
|
"resolve"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"postcss-js@4.0.1_postcss@8.4.47": {
|
||||||
|
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
|
||||||
|
"dependencies": [
|
||||||
|
"camelcase-css",
|
||||||
|
"postcss"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"postcss-load-config@4.0.2_postcss@8.4.47": {
|
||||||
|
"integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
|
||||||
|
"dependencies": [
|
||||||
|
"lilconfig@3.1.2",
|
||||||
|
"postcss",
|
||||||
|
"yaml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"postcss-nested@6.2.0_postcss@8.4.47": {
|
||||||
|
"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
|
||||||
|
"dependencies": [
|
||||||
|
"postcss",
|
||||||
|
"postcss-selector-parser"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"postcss-selector-parser@6.1.2": {
|
||||||
|
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
|
||||||
|
"dependencies": [
|
||||||
|
"cssesc",
|
||||||
|
"util-deprecate"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"postcss-value-parser@4.2.0": {
|
||||||
|
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
|
||||||
|
},
|
||||||
"postcss@8.4.47": {
|
"postcss@8.4.47": {
|
||||||
"integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
|
"integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -1053,6 +1342,9 @@
|
|||||||
"prelude-ls@1.2.1": {
|
"prelude-ls@1.2.1": {
|
||||||
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
|
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
|
||||||
},
|
},
|
||||||
|
"proxy-from-env@1.1.0": {
|
||||||
|
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
||||||
|
},
|
||||||
"punycode@2.3.1": {
|
"punycode@2.3.1": {
|
||||||
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
|
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
|
||||||
},
|
},
|
||||||
@ -1070,15 +1362,51 @@
|
|||||||
"react-refresh@0.14.2": {
|
"react-refresh@0.14.2": {
|
||||||
"integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="
|
"integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="
|
||||||
},
|
},
|
||||||
|
"react-router-dom@6.27.0_react@18.3.1_react-dom@18.3.1__react@18.3.1": {
|
||||||
|
"integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==",
|
||||||
|
"dependencies": [
|
||||||
|
"@remix-run/router",
|
||||||
|
"react",
|
||||||
|
"react-dom",
|
||||||
|
"react-router"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"react-router@6.27.0_react@18.3.1": {
|
||||||
|
"integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==",
|
||||||
|
"dependencies": [
|
||||||
|
"@remix-run/router",
|
||||||
|
"react"
|
||||||
|
]
|
||||||
|
},
|
||||||
"react@18.3.1": {
|
"react@18.3.1": {
|
||||||
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
|
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"loose-envify"
|
"loose-envify"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"read-cache@1.0.0": {
|
||||||
|
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
|
||||||
|
"dependencies": [
|
||||||
|
"pify"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"readdirp@3.6.0": {
|
||||||
|
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
||||||
|
"dependencies": [
|
||||||
|
"picomatch"
|
||||||
|
]
|
||||||
|
},
|
||||||
"resolve-from@4.0.0": {
|
"resolve-from@4.0.0": {
|
||||||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
|
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
|
||||||
},
|
},
|
||||||
|
"resolve@1.22.8": {
|
||||||
|
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
|
||||||
|
"dependencies": [
|
||||||
|
"is-core-module",
|
||||||
|
"path-parse",
|
||||||
|
"supports-preserve-symlinks-flag"
|
||||||
|
]
|
||||||
|
},
|
||||||
"reusify@1.0.4": {
|
"reusify@1.0.4": {
|
||||||
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
|
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
|
||||||
},
|
},
|
||||||
@ -1132,12 +1460,55 @@
|
|||||||
"shebang-regex@3.0.0": {
|
"shebang-regex@3.0.0": {
|
||||||
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
|
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
|
||||||
},
|
},
|
||||||
|
"signal-exit@4.1.0": {
|
||||||
|
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
|
||||||
|
},
|
||||||
"source-map-js@1.2.1": {
|
"source-map-js@1.2.1": {
|
||||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
|
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
|
||||||
},
|
},
|
||||||
|
"string-width@4.2.3": {
|
||||||
|
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||||
|
"dependencies": [
|
||||||
|
"emoji-regex@8.0.0",
|
||||||
|
"is-fullwidth-code-point",
|
||||||
|
"strip-ansi@6.0.1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"string-width@5.1.2": {
|
||||||
|
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
|
||||||
|
"dependencies": [
|
||||||
|
"eastasianwidth",
|
||||||
|
"emoji-regex@9.2.2",
|
||||||
|
"strip-ansi@7.1.0"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"strip-ansi@6.0.1": {
|
||||||
|
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||||
|
"dependencies": [
|
||||||
|
"ansi-regex@5.0.1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"strip-ansi@7.1.0": {
|
||||||
|
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
||||||
|
"dependencies": [
|
||||||
|
"ansi-regex@6.1.0"
|
||||||
|
]
|
||||||
|
},
|
||||||
"strip-json-comments@3.1.1": {
|
"strip-json-comments@3.1.1": {
|
||||||
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
|
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
|
||||||
},
|
},
|
||||||
|
"sucrase@3.35.0": {
|
||||||
|
"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
|
||||||
|
"dependencies": [
|
||||||
|
"@jridgewell/gen-mapping",
|
||||||
|
"commander",
|
||||||
|
"glob",
|
||||||
|
"lines-and-columns",
|
||||||
|
"mz",
|
||||||
|
"pirates",
|
||||||
|
"ts-interface-checker"
|
||||||
|
]
|
||||||
|
},
|
||||||
"supports-color@5.5.0": {
|
"supports-color@5.5.0": {
|
||||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -1150,9 +1521,51 @@
|
|||||||
"has-flag@4.0.0"
|
"has-flag@4.0.0"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"supports-preserve-symlinks-flag@1.0.0": {
|
||||||
|
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
|
||||||
|
},
|
||||||
|
"tailwindcss@3.4.13_postcss@8.4.47": {
|
||||||
|
"integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==",
|
||||||
|
"dependencies": [
|
||||||
|
"@alloc/quick-lru",
|
||||||
|
"arg",
|
||||||
|
"chokidar",
|
||||||
|
"didyoumean",
|
||||||
|
"dlv",
|
||||||
|
"fast-glob",
|
||||||
|
"glob-parent@6.0.2",
|
||||||
|
"is-glob",
|
||||||
|
"jiti",
|
||||||
|
"lilconfig@2.1.0",
|
||||||
|
"micromatch",
|
||||||
|
"normalize-path",
|
||||||
|
"object-hash",
|
||||||
|
"picocolors",
|
||||||
|
"postcss",
|
||||||
|
"postcss-import",
|
||||||
|
"postcss-js",
|
||||||
|
"postcss-load-config",
|
||||||
|
"postcss-nested",
|
||||||
|
"postcss-selector-parser",
|
||||||
|
"resolve",
|
||||||
|
"sucrase"
|
||||||
|
]
|
||||||
|
},
|
||||||
"text-table@0.2.0": {
|
"text-table@0.2.0": {
|
||||||
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
|
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
|
||||||
},
|
},
|
||||||
|
"thenify-all@1.6.0": {
|
||||||
|
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
|
||||||
|
"dependencies": [
|
||||||
|
"thenify"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"thenify@3.3.1": {
|
||||||
|
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
|
||||||
|
"dependencies": [
|
||||||
|
"any-promise"
|
||||||
|
]
|
||||||
|
},
|
||||||
"to-fast-properties@2.0.0": {
|
"to-fast-properties@2.0.0": {
|
||||||
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
|
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
|
||||||
},
|
},
|
||||||
@ -1168,6 +1581,9 @@
|
|||||||
"typescript"
|
"typescript"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"ts-interface-checker@0.1.13": {
|
||||||
|
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
|
||||||
|
},
|
||||||
"type-check@0.4.0": {
|
"type-check@0.4.0": {
|
||||||
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
|
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -1199,6 +1615,9 @@
|
|||||||
"punycode"
|
"punycode"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"util-deprecate@1.0.2": {
|
||||||
|
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
||||||
|
},
|
||||||
"vite@5.4.8": {
|
"vite@5.4.8": {
|
||||||
"integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==",
|
"integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
@ -1217,9 +1636,28 @@
|
|||||||
"word-wrap@1.2.5": {
|
"word-wrap@1.2.5": {
|
||||||
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="
|
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="
|
||||||
},
|
},
|
||||||
|
"wrap-ansi@7.0.0": {
|
||||||
|
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
||||||
|
"dependencies": [
|
||||||
|
"ansi-styles@4.3.0",
|
||||||
|
"string-width@4.2.3",
|
||||||
|
"strip-ansi@6.0.1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"wrap-ansi@8.1.0": {
|
||||||
|
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
|
||||||
|
"dependencies": [
|
||||||
|
"ansi-styles@6.2.1",
|
||||||
|
"string-width@5.1.2",
|
||||||
|
"strip-ansi@7.1.0"
|
||||||
|
]
|
||||||
|
},
|
||||||
"yallist@3.1.1": {
|
"yallist@3.1.1": {
|
||||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
|
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
|
||||||
},
|
},
|
||||||
|
"yaml@2.6.0": {
|
||||||
|
"integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ=="
|
||||||
|
},
|
||||||
"yocto-queue@0.1.0": {
|
"yocto-queue@0.1.0": {
|
||||||
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
|
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
|
||||||
}
|
}
|
||||||
@ -1228,6 +1666,7 @@
|
|||||||
"packageJson": {
|
"packageJson": {
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"npm:@eslint/js@^9.11.1",
|
"npm:@eslint/js@^9.11.1",
|
||||||
|
"npm:@hookform/resolvers@^3.9.0",
|
||||||
"npm:@types/react-dom@^18.3.0",
|
"npm:@types/react-dom@^18.3.0",
|
||||||
"npm:@types/react@^18.3.10",
|
"npm:@types/react@^18.3.10",
|
||||||
"npm:@vitejs/plugin-react@^4.3.2",
|
"npm:@vitejs/plugin-react@^4.3.2",
|
||||||
@ -1239,12 +1678,18 @@
|
|||||||
"npm:globals@^15.9.0",
|
"npm:globals@^15.9.0",
|
||||||
"npm:postcss@^8.4.47",
|
"npm:postcss@^8.4.47",
|
||||||
"npm:react-dom@^18.3.1",
|
"npm:react-dom@^18.3.1",
|
||||||
|
"npm:react-hook-form@^7.53.0",
|
||||||
"npm:react-router-dom@^6.27.0",
|
"npm:react-router-dom@^6.27.0",
|
||||||
|
"npm:react-router@^6.27.0",
|
||||||
|
"npm:react-select-async-paginate@~0.7.6",
|
||||||
|
"npm:react-toastify@^10.0.6",
|
||||||
"npm:react@^18.3.1",
|
"npm:react@^18.3.1",
|
||||||
"npm:tailwindcss@^3.4.13",
|
"npm:tailwindcss@^3.4.13",
|
||||||
"npm:typescript-eslint@^8.7.0",
|
"npm:typescript-eslint@^8.7.0",
|
||||||
"npm:typescript@^5.5.3",
|
"npm:typescript@^5.5.3",
|
||||||
"npm:vite@^5.4.8"
|
"npm:uuid@^11.0.1",
|
||||||
|
"npm:vite@^5.4.8",
|
||||||
|
"npm:yup@^1.4.0"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,13 +10,20 @@
|
|||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@hookform/resolvers": "^3.9.0",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"axios": "^1.7.7",
|
"axios": "^1.7.7",
|
||||||
"postcss": "^8.4.47",
|
"postcss": "^8.4.47",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-dom": "^18.3.1",
|
"react-dom": "^18.3.1",
|
||||||
|
"react-hook-form": "^7.53.0",
|
||||||
|
"react-router": "^6.27.0",
|
||||||
"react-router-dom": "^6.27.0",
|
"react-router-dom": "^6.27.0",
|
||||||
"tailwindcss": "^3.4.13"
|
"react-select-async-paginate": "^0.7.6",
|
||||||
|
"react-toastify": "^10.0.6",
|
||||||
|
"tailwindcss": "^3.4.13",
|
||||||
|
"uuid": "^11.0.1",
|
||||||
|
"yup": "^1.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.11.1",
|
"@eslint/js": "^9.11.1",
|
||||||
|
|||||||
@ -1,33 +0,0 @@
|
|||||||
import { useState } from 'react'
|
|
||||||
import { createContext } from 'react';
|
|
||||||
import './assets/App.css'
|
|
||||||
import { BrowserRouter, Route, Routes } from "react-router-dom"
|
|
||||||
import Login from "./components/login/login"
|
|
||||||
|
|
||||||
interface AuthContextType {
|
|
||||||
jwt: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const AuthContext = createContext<AuthContextType|null>(null);
|
|
||||||
|
|
||||||
function App() {
|
|
||||||
const [jwt, setJWt] = useState(null)
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<BrowserRouter>
|
|
||||||
<AuthContext.Provider value={{
|
|
||||||
auth: [jwt, setJWt],
|
|
||||||
}}>
|
|
||||||
<Routes>
|
|
||||||
<Route path='/' element={<Login />} />
|
|
||||||
<Route path='/create' element={<Login />} />
|
|
||||||
<Route path='/edit' element={<Login />} />
|
|
||||||
</Routes>
|
|
||||||
</AuthContext.Provider>
|
|
||||||
</BrowserRouter>
|
|
||||||
</>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default App
|
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
import { Outlet } from "react-router";
|
||||||
|
import Navbar from "./components/navbar/navbar";
|
||||||
|
import './assets/app.css'
|
||||||
|
import { BrowserRouter, Route, Routes } from "react-router-dom"
|
||||||
|
import { ToastContainer } from "react-toastify";
|
||||||
|
import { UserProvider } from "./context/useAuth"
|
||||||
|
import { OrderProvider } from "./context/useOrder"
|
||||||
|
import globalRouter from "./helpers/globalRouter";
|
||||||
|
import { useLocation, useNavigate } from "react-router-dom";
|
||||||
|
|
||||||
|
function App() {
|
||||||
|
|
||||||
|
const navigate = useNavigate();
|
||||||
|
const location = useLocation();
|
||||||
|
globalRouter.navigate = navigate;
|
||||||
|
globalRouter.location = location;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<UserProvider>
|
||||||
|
<OrderProvider>
|
||||||
|
<Navbar />
|
||||||
|
<Outlet />
|
||||||
|
<ToastContainer />
|
||||||
|
</OrderProvider>
|
||||||
|
</UserProvider>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default App
|
||||||
@ -1,42 +0,0 @@
|
|||||||
#root {
|
|
||||||
max-width: 1280px;
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 2rem;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
height: 6em;
|
|
||||||
padding: 1.5em;
|
|
||||||
will-change: filter;
|
|
||||||
transition: filter 300ms;
|
|
||||||
}
|
|
||||||
.logo:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #646cffaa);
|
|
||||||
}
|
|
||||||
.logo.react:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #61dafbaa);
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes logo-spin {
|
|
||||||
from {
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
to {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
|
||||||
a:nth-of-type(2) .logo {
|
|
||||||
animation: logo-spin infinite 20s linear;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
padding: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.read-the-docs {
|
|
||||||
color: #888;
|
|
||||||
}
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
|
||||||
@ -1,3 +1,4 @@
|
|||||||
|
@import 'react-toastify/dist/ReactToastify.css';
|
||||||
@tailwind base;
|
@tailwind base;
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
|||||||
@ -1,58 +1,106 @@
|
|||||||
import React, { useState, useContext } from "react";
|
import React from "react";
|
||||||
import axios from "axios";
|
import * as Yup from "yup";
|
||||||
|
import { yupResolver } from "@hookform/resolvers/yup";
|
||||||
|
import { useAuth } from "../../context/useAuth";
|
||||||
|
import { useForm } from "react-hook-form";
|
||||||
|
import { useLocation } from "react-router-dom"
|
||||||
|
type Props = {};
|
||||||
|
|
||||||
function Login() {
|
type LoginFormsInputs = {
|
||||||
const [username, setUsername] = useState("");
|
userName: string;
|
||||||
const [password, setPassword] = useState("");
|
password: string;
|
||||||
const [errorMessage, setErrorMessage] = useState(null);
|
};
|
||||||
const { setToken } = useContext(AuthContext);
|
|
||||||
const navigate = useNavigate();
|
|
||||||
|
|
||||||
const handleSubmit = async (e) => {
|
const validation = Yup.object().shape({
|
||||||
e.preventDefault();
|
userName: Yup.string().required("Username is required"),
|
||||||
try {
|
password: Yup.string().required("Password is required"),
|
||||||
const response = await axios.post("/apps/api/contact/login", {
|
});
|
||||||
username,
|
|
||||||
password,
|
|
||||||
});
|
|
||||||
setToken(response.data.token);
|
|
||||||
localStorage.setItem("token", response.data.token);
|
|
||||||
navigate("/dashboard");
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Authentication failed:", error);
|
|
||||||
setToken(null);
|
|
||||||
localStorage.removeItem("token");
|
|
||||||
if (error.response && error.response.data) {
|
|
||||||
setErrorMessage(error.response.data); // Set the error message if present in the error response
|
|
||||||
} else {
|
|
||||||
setErrorMessage("An unexpected error occurred. Please try again.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
const Login = (props: Props) => {
|
||||||
|
const { loginUser } = useAuth();
|
||||||
|
const {
|
||||||
|
register,
|
||||||
|
handleSubmit,
|
||||||
|
formState: { errors },
|
||||||
|
} = useForm<LoginFormsInputs>({ resolver: yupResolver(validation) });
|
||||||
|
|
||||||
return (
|
const location = useLocation();
|
||||||
<>
|
|
||||||
<div className='bg-black/50 fixed top-0 left-0 w-full h-screen'></div>
|
|
||||||
<div className='fixed w-full px-4 py-24 z-50'>
|
|
||||||
<div className='max-w-[450px] h-[600px] mx-auto bg-black/80 text-white'>
|
|
||||||
<div className='max-w-[320px] mx-auto py-16'>
|
|
||||||
<h1>Sign Up Here</h1>
|
|
||||||
<form className='w-full flex flex-col py-4'>
|
|
||||||
<p className='text-white font-bold'>UserName</p>
|
|
||||||
<input type="text" required className='p-3 my-2 rounded text-black' placeholder='JohnDoe'/>
|
|
||||||
<p className='text-white font-bold'>PassWord</p>
|
|
||||||
<input type="password" required className='p-3 my-2 rounded text-black' placeholder='Please enter a strong password'/>
|
|
||||||
<button type="submit" className='bg-red-700 py-3 my-6 rounded font-bold px-4'>Submit</button>
|
|
||||||
<div>
|
|
||||||
<p><input type="checkbox" />Remember Me</p>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Login
|
const handleLogin = (form: LoginFormsInputs) => {
|
||||||
|
loginUser(form.userName, form.password, location.state.from);
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<section className="bg-gray-50 dark:bg-gray-900">
|
||||||
|
<div className="flex flex-col items-center justify-center px-6 py-8 mx-auto md:h-screen lg:py-0">
|
||||||
|
<div className="w-full bg-white rounded-lg shadow dark:border md:mb-20 sm:max-w-md xl:p-0 dark:bg-gray-800 dark:border-gray-700">
|
||||||
|
<div className="p-6 space-y-4 md:space-y-6 sm:p-8">
|
||||||
|
<h1 className="text-xl font-bold leading-tight tracking-tight text-gray-900 md:text-2xl dark:text-white">
|
||||||
|
Sign in to your account
|
||||||
|
</h1>
|
||||||
|
<form
|
||||||
|
className="space-y-4 md:space-y-6"
|
||||||
|
onSubmit={handleSubmit(handleLogin)}
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<label
|
||||||
|
htmlFor="email"
|
||||||
|
className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
|
||||||
|
>
|
||||||
|
Username
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="username"
|
||||||
|
className="bg-gray-50 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
|
||||||
|
placeholder="Username"
|
||||||
|
{...register("userName")}
|
||||||
|
/>
|
||||||
|
{errors.userName ? (
|
||||||
|
<p className="text-white">{errors.userName.message}</p>
|
||||||
|
) : (
|
||||||
|
""
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label
|
||||||
|
htmlFor="password"
|
||||||
|
className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
|
||||||
|
>
|
||||||
|
Password
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="password"
|
||||||
|
id="password"
|
||||||
|
placeholder="••••••••"
|
||||||
|
className="bg-gray-50 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
|
||||||
|
{...register("password")}
|
||||||
|
/>
|
||||||
|
{errors.password ? (
|
||||||
|
<p className="text-white">{errors.password.message}</p>
|
||||||
|
) : (
|
||||||
|
""
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center justify-between">
|
||||||
|
<a
|
||||||
|
href="#"
|
||||||
|
className="text-sm text-white font-medium text-primary-600 hover:underline dark:text-primary-500"
|
||||||
|
>
|
||||||
|
Forgot password?
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
className="w-full text-white bg-psc hover:bg-primary-700 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800"
|
||||||
|
>
|
||||||
|
Sign in
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Login;
|
||||||
|
|||||||
@ -0,0 +1,39 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import { useAuth } from "../../context/useAuth";
|
||||||
|
|
||||||
|
interface Props {}
|
||||||
|
|
||||||
|
const Navbar = (props: Props) => {
|
||||||
|
const { isLoggedIn, user, logout } = useAuth();
|
||||||
|
return (
|
||||||
|
<nav className="p-6">
|
||||||
|
<div className="flex items-center justify-between">
|
||||||
|
<div className="flex items-center space-x-20">
|
||||||
|
<Link to="/">
|
||||||
|
<img src="" alt="" />
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
{isLoggedIn() ? (
|
||||||
|
<div className="hidden lg:flex items-center space-x-6 text-back">
|
||||||
|
<div className="hover:text-darkBlue">Welcome, {user?.userName}</div>
|
||||||
|
<a
|
||||||
|
onClick={logout}
|
||||||
|
className="px-8 py-3 font-bold rounded text-white bg-psc hover:opacity-70"
|
||||||
|
>
|
||||||
|
Logout
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<div className="hidden lg:flex items-center space-x-6 text-back">
|
||||||
|
<Link to="/login" className="px-8 py-3 font-bold rounded text-white bg-psc hover:opacity-70">
|
||||||
|
Login
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Navbar;
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
import React from 'reactjs'
|
||||||
|
import Currency from "../../../helpers/currency"
|
||||||
|
import {useOrder} from "../../../context/useOrder"
|
||||||
|
|
||||||
|
const Calc = () => {
|
||||||
|
|
||||||
|
const { getVat, getGross, getNet } = useOrder();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<h3>
|
||||||
|
<small className="text-body-secondary"> Netto: <Currency price={getNet()} /> + MwSt.: <Currency price={getVat()} /> =</small> Brutto: <Currency price={getGross()} />
|
||||||
|
</h3>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Calc
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
import {useParams} from "react-router-dom"
|
||||||
|
import { useOrder } from "../../context/useOrder"
|
||||||
|
import { createContext, useState, useEffect } from 'react';
|
||||||
|
import Calc from "./calc/calc"
|
||||||
|
import ShippingComponent from "./shipping/shipping"
|
||||||
|
import PaymentComponent from "./payment/payment"
|
||||||
|
|
||||||
|
const Order = () => {
|
||||||
|
|
||||||
|
const { loadOrder } = useOrder();
|
||||||
|
let { uuid } = useParams();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
console.log(uuid)
|
||||||
|
if(uuid) {
|
||||||
|
loadOrder(uuid)
|
||||||
|
}
|
||||||
|
}, [uuid])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex flex-row">
|
||||||
|
<div className="basis-3/4">
|
||||||
|
<ShippingComponent />
|
||||||
|
<PaymentComponent />
|
||||||
|
</div>
|
||||||
|
<div className="basis-1/4">
|
||||||
|
<Calc/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Order
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user