diff --git a/.gitignore b/.gitignore
index 8281fda..484420b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,8 @@
!/public/landings/.gitkeep
/public/generation/*
!/public/generation/.gitkeep
+/public/export/*
+!/public/export/.gitkeep
/public/coupons/*
!/public/coupons/.gitkeep
/public/images/logos/*
diff --git a/app/Http/Controllers/ExportController.php b/app/Http/Controllers/ExportController.php
new file mode 100644
index 0000000..77ff89f
--- /dev/null
+++ b/app/Http/Controllers/ExportController.php
@@ -0,0 +1,116 @@
+ 2958008200723])->first();
+ $campid = 101;
+ $startdate = '27-02-2019';
+ $enddate = '11-03-2019';
+
+ $labels = $this->getLabelsForStats($startdate, $enddate);
+
+ $dataCoupon = $this->getDataForCoupon($labels, $campid, $coupon);
+
+
+ $sites = Site::all();
+ $startdate = new DateTime("first day of last month");
+ $startdate = $startdate->format('Y-m-d');
+ $enddate = date('Y-m-d');
+ // $pdf = App::make('dompdf.wrapper');
+
+ // $myData = new Data();
+ // $myData->addPoints($dataCoupon,"My Serie 1");
+ // $myData->addPoints($labels,"My Serie 2");
+ // $myData->setAxisName(0,"Coupons");
+ // $myData->setAbscissa("My Serie 2");
+
+ // $myPicture = new Image(700,230,$myData);
+ // $myPicture->setGraphArea(60,40,670,190);
+ // $myPicture->setFontProperties(array("FontSize"=>6));
+ // $myPicture->drawScale(array("DrawSubTicks"=>TRUE, 'LabelRotation'=>25));
+ // $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10));
+ // $myPicture->drawSplineChart();
+ // $LabelSettings = array("NoTitle"=>TRUE);
+ // $myPicture->writeLabel("My Serie 1",0, $LabelSettings);
+ // $myPicture->Render('charts/test.png');
+
+ // $pdf->loadHTML('
Test ');
+ // return $pdf->download();
+ return view('export.index')->with(['sites'=> $sites, 'startdate' => $startdate, 'enddate' => $enddate]);
+ }
+
+ //------ AJAX Export
+ public function export_coupons(Request $request){
+ $ids = $request->input('ids');
+ $startdate = date('Y-m-d', strtotime($request->input('startdate')));
+ $enddate = date('Y-m-d', strtotime($request->input('enddate')));
+ $coupons = Coupon::find($ids);
+
+ $labels = $this->getLabelsForStats($startdate, $enddate);
+
+
+
+ foreach ($coupons as $coupon) {
+ $cpName = str_replace(' ', '', $coupon->coupon_name);
+ $now = strtotime(now());
+ $full_path = 'export/'.$cpName.'_'.$now.'.pdf';
+ $dataCoupon = $this->getDataForCouponAllCamp($labels, $coupon);
+ $coupon->couponQuantity = $this->getFullQuantity($coupon);
+ $coupon->couponFullPrinted = $this->getUsedQuantity($coupon);
+ $coupon->couponPrinted = $this->getUsedQuantityOnPeriod($coupon, $startdate, $enddate);
+
+ $pdf = App::make('dompdf.wrapper');
+
+ $myData = new Data();
+
+ $myData->addPoints($dataCoupon,"My Serie 1");
+ $myData->addPoints($labels,"My Serie 2");
+ $myData->setAxisName(0,"Coupons Diffusés");
+ $myData->setAbscissa("My Serie 2");
+ $myData->setSerieTicks("My Serie 2",2);
+ $serieSettings = array("R"=>229,"G"=>11,"B"=>11);
+ $myData->setPalette("My Serie 1",$serieSettings);
+ $myPicture = new Image(700,230,$myData);
+ $myPicture->setGraphArea(60,40,670,190);
+ $myPicture->setFontProperties(array("FontSize"=>10));
+ $myPicture->drawScale(array("DrawSubTicks"=>TRUE, 'LabelSkip'=>1, 'LabelRotation'=>25, "Mode" => SCALE_MODE_START0, "CycleBackground"=>TRUE,"GridR"=>102,"GridG"=>102,"GridB"=>102));
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10));
+ $myPicture->drawLineChart(array("DisplayColor"=>DISPLAY_AUTO));
+ $LabelSettings = array("NoTitle"=>TRUE);
+ $myPicture->Render('export/temp.png');
+
+ $view = view('export.template')->with(['src' => 'export/temp.png', 'coupon' => $coupon, 'startdate' => $startdate, 'enddate' => $enddate])->render();
+
+ //var_dump($view);
+
+ $pdf->loadHTML($view);
+ $pdf->save($full_path);
+ }
+
+ return json_encode($full_path);
+ }
+}
diff --git a/app/Http/Controllers/StatistiqueController.php b/app/Http/Controllers/StatistiqueController.php
index df7b541..826e773 100644
--- a/app/Http/Controllers/StatistiqueController.php
+++ b/app/Http/Controllers/StatistiqueController.php
@@ -7,11 +7,12 @@ use App\Campagne;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Traits\CouponTrait;
-use DateTime;
+use App\Traits\GraphTrait;
class StatistiqueController extends Controller
{
use CouponTrait;
+ use GraphTrait;
/**
* Display a listing of the resource.
*
@@ -91,51 +92,21 @@ class StatistiqueController extends Controller
$startdate = $request->startdate;
$enddate = $request->enddate;
- $datetime1 = new DateTime($request->startdate);
- $datetime2 = new DateTime($request->enddate);
- $interval = $datetime1->diff($datetime2);
- $days = $interval->format('%a');
- // ---- Labels des graphiques
- $labels = [];
- for ($i=0; $i <= $days ; $i++) {
- $date = date('d/m/Y', strtotime("+".$i." days", strtotime($startdate)));
- array_push($labels, $date);
- }
- //array_reverse($labels);
+ // ---- Labels pour la période
+ $labels = $this->getLabelsForStats($startdate, $enddate);
// ---- Data pour le graphique global
- $dataGlobal = [];
- $test = [];
- foreach ($labels as $label) {
- $date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
- $stat = Statistique::where(['stat_campId' => $campid])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted');
- $test[] = $date;
- if(isset($stat)){
- $dataGlobal[] = $stat;
- } else {
- $dataGlobal[] = 0;
- }
- }
-
+ $dataGlobal = $this->getDataForCamp($labels, $campid);
+
// ---- Data pour le graphique par coupons
$campagne = Campagne::where(['camp_id' => $campid])->first();
$coupons = $campagne->coupons;
$dataSpec = [];
foreach ($coupons as $coupon) {
- $dataCoupon = [];
- foreach ($labels as $label) {
- $date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
- $stat = Statistique::where(['stat_campId' => $campid, 'stat_couponId' => $coupon->coupon_id])->whereDate('created_at', '=', $date)->first();
- if(isset($stat->stat_couponPrinted)){
- $dataCoupon[] = $stat->stat_couponPrinted;
- } else {
- $dataCoupon[] = 0;
- }
- }
+ $dataCoupon = $this->getDataForCoupon($labels, $campid, $coupon);
$dataSpec[$coupon->coupon_code] = $dataCoupon;
}
-
$data = array('labels' => $labels, 'dataGlobal' => $dataGlobal, 'dataSpec' => $dataSpec);
return json_encode($data);
diff --git a/app/Traits/CouponTrait.php b/app/Traits/CouponTrait.php
index de30243..47e74cc 100644
--- a/app/Traits/CouponTrait.php
+++ b/app/Traits/CouponTrait.php
@@ -7,8 +7,9 @@ use App\Coupon;
use App\Contact;
use App\Calendrier;
use App\Mur;
+use App\Statistique;
use App\Panier;
-
+use DateTime;
trait CouponTrait {
@@ -247,4 +248,27 @@ trait CouponTrait {
}
return $countPrinted;
}
+
+ public function getUsedQuantityOnPeriod(Coupon $coupon, $startdate, $enddate) {
+ $countPrinted = 0;
+ $startdate = date('Y-m-d H:i:s', strtotime($startdate));
+ $enddate = date('Y-m-d H:i:s', strtotime($enddate));
+ $campagnes = $coupon->campagnes()->get();
+ foreach ($campagnes as $campagne) {
+ if($campagne->camp_type == 0 || $campagne->camp_type == 2) { // Murs
+ $murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->whereBetween('mur_createdate', [$startdate, $enddate])->get();
+ $countPrinted = $countPrinted + count($murs);
+ } else { // Paniers
+ $paniers = Panier::where(['panier_campId' => $campagne->camp_id])->where(function($query) use ($startdate, $enddate){
+ $query->whereBetween('panier_createdate', [$startdate, $enddate])
+ ->orWhereBetween('panier_updatedate', [$startdate, $enddate]);
+ })->get();
+ foreach ($paniers as $key => $panier) {
+ $panierContentCount = $panier->panierContents->sum('panier_content_printed');
+ $countPrinted = $countPrinted + $panierContentCount;
+ }
+ }
+ }
+ return $countPrinted;
+ }
}
\ No newline at end of file
diff --git a/app/Traits/GraphTrait.php b/app/Traits/GraphTrait.php
new file mode 100644
index 0000000..2c38f6b
--- /dev/null
+++ b/app/Traits/GraphTrait.php
@@ -0,0 +1,78 @@
+diff($datetime2);
+ $days = $interval->format('%a');
+
+ // ---- Labels des graphiques
+ $labels = [];
+ for ($i=0; $i <= $days ; $i++) {
+ $date = date('d/m/Y', strtotime("+".$i." days", strtotime($startdate)));
+ array_push($labels, $date);
+ }
+
+ return $labels;
+ }
+
+ // ---- Data for global graph
+ public function getDataForCamp($labels, $campid){
+ $dataGlobal = [];
+ foreach ($labels as $label) {
+ $date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
+ $stat = Statistique::where(['stat_campId' => $campid])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted');
+ if(isset($stat)){
+ $dataGlobal[] = $stat;
+ } else {
+ $dataGlobal[] = 0;
+ }
+ }
+ return $dataGlobal;
+ }
+
+ // ---- Data for one coupon on one camp
+ public function getDataForCoupon($labels, $campid, $coupon){
+ $dataCoupon = [];
+ foreach ($labels as $label) {
+ $date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
+ $stat = Statistique::where(['stat_campId' => $campid, 'stat_couponId' => $coupon->coupon_id])->whereDate('created_at', '=', $date)->first();
+ if(isset($stat->stat_couponPrinted)){
+ $dataCoupon[] = $stat->stat_couponPrinted;
+ } else {
+ $dataCoupon[] = 0;
+ }
+ }
+ return $dataCoupon;
+ }
+
+ // ---- Data for one coupon all camp
+ public function getDataForCouponAllCamp($labels, $coupon) {
+ $dataCoupon = [];
+ foreach ($labels as $label) {
+ $date = date('Y-m-d', strtotime(str_replace('/', '-', $label)));
+ $stat = Statistique::where(['stat_couponId' => $coupon->coupon_id])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted');
+ if(isset($stat)){
+ $dataCoupon[] = $stat;
+ } else {
+ $dataCoupon[] = 0;
+ }
+ }
+ return $dataCoupon;
+ }
+}
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 5772a56..27085e3 100644
--- a/composer.json
+++ b/composer.json
@@ -6,12 +6,14 @@
"type": "project",
"require": {
"php": "^7.1.3",
+ "barryvdh/laravel-dompdf": "^0.8.4",
"doctrine/dbal": "^2.8",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.7.*",
"laravel/tinker": "^1.0",
"laravelcollective/html": "^5.4.0",
"picqer/php-barcode-generator": "^0.3.0",
+ "szymach/c-pchart": "^3.0",
"uxweb/sweet-alert": "^2.0"
},
"require-dev": {
diff --git a/composer.lock b/composer.lock
index 8a73eef..fcf6cf2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,64 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "content-hash": "5472aedecf7d5401ffe3f89f46979fa2",
+ "content-hash": "24e88d3c29349a8c1dded281fc337313",
"packages": [
+ {
+ "name": "barryvdh/laravel-dompdf",
+ "version": "v0.8.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/barryvdh/laravel-dompdf.git",
+ "reference": "3fd817065e1c820b1ddace8b2bf65ca45088df4f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/3fd817065e1c820b1ddace8b2bf65ca45088df4f",
+ "reference": "3fd817065e1c820b1ddace8b2bf65ca45088df4f",
+ "shasum": ""
+ },
+ "require": {
+ "dompdf/dompdf": "^0.8",
+ "illuminate/support": "5.5.x|5.6.x|5.7.x|5.8.x",
+ "php": ">=7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.8-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Barryvdh\\DomPDF\\ServiceProvider"
+ ],
+ "aliases": {
+ "PDF": "Barryvdh\\DomPDF\\Facade"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Barryvdh\\DomPDF\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Barry vd. Heuvel",
+ "email": "barryvdh@gmail.com"
+ }
+ ],
+ "description": "A DOMPDF Wrapper for Laravel",
+ "keywords": [
+ "dompdf",
+ "laravel",
+ "pdf"
+ ],
+ "time": "2019-02-26T18:07:43+00:00"
+ },
{
"name": "dnoegel/php-xdg-base-dir",
"version": "0.1",
@@ -388,6 +444,72 @@
],
"time": "2014-09-09T13:34:57+00:00"
},
+ {
+ "name": "dompdf/dompdf",
+ "version": "v0.8.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/dompdf.git",
+ "reference": "75f13c700009be21a1965dc2c5b68a8708c22ba2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/dompdf/zipball/75f13c700009be21a1965dc2c5b68a8708c22ba2",
+ "reference": "75f13c700009be21a1965dc2c5b68a8708c22ba2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "phenx/php-font-lib": "0.5.*",
+ "phenx/php-svg-lib": "0.3.*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8|^5.5|^6.5",
+ "squizlabs/php_codesniffer": "2.*"
+ },
+ "suggest": {
+ "ext-gd": "Needed to process images",
+ "ext-gmagick": "Improves image processing performance",
+ "ext-imagick": "Improves image processing performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-develop": "0.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dompdf\\": "src/"
+ },
+ "classmap": [
+ "lib/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Ménager",
+ "email": "fabien.menager@gmail.com"
+ },
+ {
+ "name": "Brian Sweeney",
+ "email": "eclecticgeek@gmail.com"
+ },
+ {
+ "name": "Gabriel Bull",
+ "email": "me@gabrielbull.com"
+ }
+ ],
+ "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
+ "homepage": "https://github.com/dompdf/dompdf",
+ "time": "2018-12-14T02:40:31+00:00"
+ },
{
"name": "dragonmantank/cron-expression",
"version": "v2.2.0",
@@ -1266,6 +1388,83 @@
],
"time": "2018-07-02T15:55:56+00:00"
},
+ {
+ "name": "phenx/php-font-lib",
+ "version": "0.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PhenX/php-font-lib.git",
+ "reference": "760148820110a1ae0936e5cc35851e25a938bc97"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/760148820110a1ae0936e5cc35851e25a938bc97",
+ "reference": "760148820110a1ae0936e5cc35851e25a938bc97",
+ "shasum": ""
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "FontLib\\": "src/FontLib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Ménager",
+ "email": "fabien.menager@gmail.com"
+ }
+ ],
+ "description": "A library to read, parse, export and make subsets of different types of font files.",
+ "homepage": "https://github.com/PhenX/php-font-lib",
+ "time": "2017-09-13T16:14:37+00:00"
+ },
+ {
+ "name": "phenx/php-svg-lib",
+ "version": "v0.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PhenX/php-svg-lib.git",
+ "reference": "ccc46ef6340d4b8a4a68047e68d8501ea961442c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/ccc46ef6340d4b8a4a68047e68d8501ea961442c",
+ "reference": "ccc46ef6340d4b8a4a68047e68d8501ea961442c",
+ "shasum": ""
+ },
+ "require": {
+ "sabberworm/php-css-parser": "8.1.*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~5.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Svg\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Ménager",
+ "email": "fabien.menager@gmail.com"
+ }
+ ],
+ "description": "A library to read, parse and export to PDF SVG files.",
+ "homepage": "https://github.com/PhenX/php-svg-lib",
+ "time": "2018-06-03T10:10:03+00:00"
+ },
{
"name": "picqer/php-barcode-generator",
"version": "v0.3",
@@ -1635,6 +1834,50 @@
],
"time": "2018-07-19T23:38:55+00:00"
},
+ {
+ "name": "sabberworm/php-css-parser",
+ "version": "8.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sabberworm/PHP-CSS-Parser.git",
+ "reference": "850cbbcbe7fbb155387a151ea562897a67e242ef"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/850cbbcbe7fbb155387a151ea562897a67e242ef",
+ "reference": "850cbbcbe7fbb155387a151ea562897a67e242ef",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Sabberworm\\CSS": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Raphael Schweikert"
+ }
+ ],
+ "description": "Parser for CSS Files written in PHP",
+ "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser",
+ "keywords": [
+ "css",
+ "parser",
+ "stylesheet"
+ ],
+ "time": "2016-07-19T19:14:21+00:00"
+ },
{
"name": "swiftmailer/swiftmailer",
"version": "v6.1.3",
@@ -2566,6 +2809,71 @@
],
"time": "2018-08-02T09:24:26+00:00"
},
+ {
+ "name": "szymach/c-pchart",
+ "version": "v3.0.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/szymach/c-pchart.git",
+ "reference": "cff756ac9cb87671b4833c5935c1c7bd12947db0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/szymach/c-pchart/zipball/cff756ac9cb87671b4833c5935c1c7bd12947db0",
+ "reference": "cff756ac9cb87671b4833c5935c1c7bd12947db0",
+ "shasum": ""
+ },
+ "require": {
+ "ext-gd": "*",
+ "php": ">=5.4"
+ },
+ "require-dev": {
+ "codeception/codeception": "^2.4",
+ "phpunit/phpunit": "^4.8|^7.1",
+ "squizlabs/php_codesniffer": "^2.8|^3.3"
+ },
+ "type": "project",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev",
+ "2.0": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "CpChart\\": "src/"
+ },
+ "files": [
+ "constants.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "Jean-Damien Pogolotti",
+ "homepage": "http://www.pchart.net",
+ "role": "Creator of the original pChart library"
+ },
+ {
+ "name": "Piotr Szymaszek",
+ "homepage": "https://github.com/szymach",
+ "role": "Developer of the CpChart wrapper package"
+ }
+ ],
+ "description": "Port of \"pChart\" library into PHP 5+",
+ "homepage": "https://github.com/szymach/c-pchart",
+ "keywords": [
+ "CpChart",
+ "c-pChart",
+ "charts",
+ "pchart",
+ "statistics"
+ ],
+ "time": "2018-11-22T11:28:00+00:00"
+ },
{
"name": "tijsverkoyen/css-to-inline-styles",
"version": "2.2.1",
diff --git a/config/app.php b/config/app.php
index 332b434..c6b1e65 100644
--- a/config/app.php
+++ b/config/app.php
@@ -161,7 +161,7 @@ return [
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
-
+ Barryvdh\DomPDF\ServiceProvider::class,
],
/*
@@ -213,7 +213,7 @@ return [
'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,
'Debugbar' => Barryvdh\Debugbar\Facade::class,
-
+ 'PDF' => Barryvdh\DomPDF\Facade::class,
],
];
diff --git a/public/css/app.css b/public/css/app.css
index 62764b5..63dcf6a 100644
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -172,6 +172,13 @@ h5 i {
margin-right: 10px;
}
+h5 {
+ font-family: 'Nunito-ExtraLight', sans-serif;
+ font-size: 1em;
+ color: #de9700;
+ margin: 20px 0 10px 0;
+}
+
p {
font-family: 'Nunito-ExtraLight', sans-serif;
color: #adb5bd;
@@ -6933,9 +6940,17 @@ main section .statistiquesContent .couponStats .couponStatsDetail h4 {
color: #adb5bd;
font-weight: bold;
background-color: #212121;
+}
+
+main section .statistiquesContent .couponStats .couponStatsDetail h4 span {
cursor: pointer;
}
+main section .statistiquesContent .couponStats .couponStatsDetail h4 span:first-child {
+ width: 95%;
+ display: block;
+}
+
main section .statistiquesContent .couponStats .couponStatsDetail h4 .couponLegend {
position: absolute;
display: inline-block;
@@ -6944,6 +6959,17 @@ main section .statistiquesContent .couponStats .couponStatsDetail h4 .couponLege
width: 20px;
height: 20px;
border-radius: 50%;
+ overflow: hidden;
+}
+
+main section .statistiquesContent .couponStats .couponStatsDetail h4 .couponLegend .line {
+ width: 35px;
+ height: 20px;
+ border-bottom: 3px solid red;
+ -webkit-transform: translateY(-20px) translateX(5px) rotate(27deg);
+ position: absolute;
+ top: 9px;
+ left: -10px;
}
main section .statistiquesContent .couponStats .couponStatsDetail .content {
@@ -6985,108 +7011,48 @@ main section .statistiquesContent .graphStats h3 {
margin: 30px 0 20px 0;
}
+main section .statistiquesContent .graphStats h3 i {
+ float: right;
+ margin-left: 10px;
+ cursor: pointer;
+}
+
+main section .selector-export {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+main section .selector-export h4 {
+ margin: 0;
+ margin-right: 20px;
+}
+
+main section .selector-export input {
+ min-width: 150px;
+}
+
+main section .selector-export input#startdate {
+ margin-right: 20px;
+}
+
+main section .export-btn {
+ text-align: right;
+ margin-top: 20px;
+}
+
#coupons-list {
background-color: #2d2d2d;
padding: 20px;
min-width: 550px;
}
-#coupons-list .inputGroup {
- background-color: #393939;
- display: block;
- margin: 2px 0;
- position: relative;
-}
-
-#coupons-list .inputGroup.notPublished {
- background-color: rgba(223, 0, 0, 0.3);
-}
-
-#coupons-list .inputGroup label {
- padding: 8px 30px;
- width: 100%;
- display: block;
- text-align: left;
- color: #adb5bd;
- cursor: pointer;
- position: relative;
- z-index: 2;
- -webkit-transition: color 200ms ease-in;
- transition: color 200ms ease-in;
- overflow: hidden;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- font-family: 'Nunito-Regular', sans-serif;
-}
-
-#coupons-list .inputGroup label:before {
- width: 10px;
- height: 10px;
- border-radius: 50%;
- content: '';
- background-color: #212121;
- position: absolute;
- left: 50%;
- top: 50%;
- -webkit-transform: translate(-50%, -50%) scale3d(1, 1, 1);
- transform: translate(-50%, -50%) scale3d(1, 1, 1);
- -webkit-transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);
- transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);
- opacity: 0;
- z-index: -1;
-}
-
-#coupons-list .inputGroup label:after {
- width: 20px;
- height: 20px;
- content: '';
- border: 1px solid #de9700;
- background-color: #393939;
- background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.414 11L4 12.414l5.414 5.414L20.828 6.414 19.414 5l-10 10z' fill='%23393939' fill-rule='nonzero'/%3E%3C/svg%3E ");
- background-repeat: no-repeat;
- background-position: -3px -1px;
- z-index: 2;
- position: absolute;
- right: 30px;
- top: 50%;
- -webkit-transform: translateY(-50%);
- transform: translateY(-50%);
- cursor: pointer;
- -webkit-transition: all 200ms ease-in;
- transition: all 200ms ease-in;
-}
-
-#coupons-list .inputGroup input:checked ~ label {
- color: #fff;
-}
-
-#coupons-list .inputGroup input:checked ~ label:before {
- -webkit-transform: translate(-50%, -50%) scale3d(130, 130, 1);
- transform: translate(-50%, -50%) scale3d(130, 130, 1);
- opacity: 1;
-}
-
-#coupons-list .inputGroup input:checked ~ label:after {
- background-color: #de9700;
- border-color: #de9700;
-}
-
-#coupons-list .inputGroup input {
- width: 32px;
- height: 32px;
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1;
- z-index: 2;
- position: absolute;
- right: 30px;
- top: 50%;
- -webkit-transform: translateY(-50%);
- transform: translateY(-50%);
- cursor: pointer;
- visibility: hidden;
-}
-
#coupons-list input[type=submit] {
padding: 5px 10px;
background-color: #de9700;
@@ -7197,3 +7163,99 @@ main section .statistiquesContent .graphStats h3 {
cursor: pointer;
margin-right: 15px;
}
+
+.inputGroup {
+ background-color: #393939;
+ display: block;
+ margin: 2px 0;
+ position: relative;
+}
+
+.inputGroup.notPublished {
+ background-color: rgba(223, 0, 0, 0.3);
+}
+
+.inputGroup label {
+ padding: 8px 30px;
+ width: 100%;
+ display: block;
+ text-align: left;
+ color: #adb5bd;
+ cursor: pointer;
+ position: relative;
+ z-index: 2;
+ -webkit-transition: color 200ms ease-in;
+ transition: color 200ms ease-in;
+ overflow: hidden;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-family: 'Nunito-Regular', sans-serif;
+}
+
+.inputGroup label:before {
+ width: 10px;
+ height: 10px;
+ border-radius: 50%;
+ content: '';
+ background-color: #212121;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ -webkit-transform: translate(-50%, -50%) scale3d(1, 1, 1);
+ transform: translate(-50%, -50%) scale3d(1, 1, 1);
+ -webkit-transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);
+ transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);
+ opacity: 0;
+ z-index: -1;
+}
+
+.inputGroup label:after {
+ width: 20px;
+ height: 20px;
+ content: '';
+ border: 1px solid #de9700;
+ background-color: #393939;
+ background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.414 11L4 12.414l5.414 5.414L20.828 6.414 19.414 5l-10 10z' fill='%23393939' fill-rule='nonzero'/%3E%3C/svg%3E ");
+ background-repeat: no-repeat;
+ background-position: -3px -1px;
+ z-index: 2;
+ position: absolute;
+ right: 30px;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+ cursor: pointer;
+ -webkit-transition: all 200ms ease-in;
+ transition: all 200ms ease-in;
+}
+
+.inputGroup input:checked ~ label {
+ color: #fff;
+}
+
+.inputGroup input:checked ~ label:before {
+ -webkit-transform: translate(-50%, -50%) scale3d(130, 130, 1);
+ transform: translate(-50%, -50%) scale3d(130, 130, 1);
+ opacity: 1;
+}
+
+.inputGroup input:checked ~ label:after {
+ background-color: #de9700;
+ border-color: #de9700;
+}
+
+.inputGroup input {
+ width: 32px;
+ height: 32px;
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1;
+ z-index: 2;
+ position: absolute;
+ right: 30px;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+ cursor: pointer;
+ visibility: hidden;
+}
diff --git a/public/export/.gitkeep b/public/export/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/public/js/app.js b/public/js/app.js
index 2095059..a096d3f 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -76,7 +76,7 @@ module.exports = __webpack_require__(3);
/***/ (function(module, exports, __webpack_require__) {
"use strict";
-eval("/**\r\n * First we will load all of this project's JavaScript dependencies which\r\n * includes Vue and other libraries. It is a great starting point when\r\n * building robust, powerful web applications using Vue and Laravel.\r\n */\n\n/*\r\nrequire('./bootstrap');\r\n\r\nwindow.Vue = require('vue');\r\n\r\n/**\r\n * Next, we will create a fresh Vue application instance and attach it to\r\n * the page. Then, you may begin adding components to this application\r\n * or customize the JavaScript scaffolding to fit your unique needs.\r\n */\n\n/*\r\nVue.component('example-component', require('./components/ExampleComponent.vue'));\r\n\r\nconst app = new Vue({\r\n el: '#app'\r\n});\r\n*/\n\n\n\ntry {\n window.$ = window.jQuery = __webpack_require__(2);\n} catch (e) {}\n\nvar changeIcon = $('.marque');\nvar dropDownMarque = $('.marque-select');\n\n// FancyBox Communes\n// Confirmation \n$.fancyConfirm = function (opts) {\n opts = $.extend(true, {\n title: 'Are you sure?',\n message: '',\n okButton: 'OK',\n noButton: 'Cancel',\n callback: $.noop\n }, opts || {});\n\n $.fancybox.open({\n type: 'html',\n src: '' + '
' + opts.title + ' ' + '
' + opts.message + '
' + '
' + '' + opts.noButton + ' ' + '' + opts.okButton + ' ' + '
' + '
',\n opts: {\n animationDuration: 350,\n animationEffect: 'material',\n modal: true,\n baseTpl: '',\n afterClose: function afterClose(instance, current, e) {\n var button = e ? e.target || e.currentTarget : null;\n var value = button ? $(button).data('value') : 0;\n\n opts.callback(value);\n }\n }\n });\n};\n\n// Informations\n$.fancyInfo = function (opts) {\n opts = $.extend(true, {\n title: 'Are you sure?',\n message: '',\n okButton: 'OK',\n noButton: 'Cancel',\n callback: $.noop\n }, opts || {});\n\n $.fancybox.open({\n type: 'html',\n src: '' + '
' + opts.title + ' ' + '
' + opts.message + '
' + '
' + '' + opts.noButton + ' ' + '' + opts.okButton + ' ' + '
' + '
',\n opts: {\n animationDuration: 350,\n animationEffect: 'material',\n modal: true,\n baseTpl: '',\n afterClose: function afterClose(instance, current, e) {\n var button = e ? e.target || e.currentTarget : null;\n var value = button ? $(button).data('value') : 0;\n opts.callback(value);\n }\n }\n });\n};\n\nchangeIcon.on('click', function () {\n if (dropDownMarque.css('display') == \"none\") {\n dropDownMarque.slideDown('fast');\n } else {\n dropDownMarque.slideUp('fast');\n }\n});\n\nvar deleteIcons = document.querySelectorAll('.delete-icon');\n\nvar confirmDelete = function confirmDelete(e) {\n e.preventDefault();\n var url = e.target.parentElement.href;\n var form = document.querySelector('#delete-hidden');\n\n $.fancyConfirm({\n title: \" Suppression\",\n message: \"Êtes-vous sûr de vouloir effacer cet élément ?\",\n okButton: 'Supprimer',\n noButton: 'Annuler',\n callback: function callback(value) {\n if (value) {\n form.action = url;\n form.submit();\n }\n }\n });\n};\n\ndeleteIcons.forEach(function (el) {\n el.addEventListener('click', confirmDelete);\n});\n\n$('.burger').on('click', function (e) {\n e.preventDefault();\n $(this).parent('nav').css('left', '0');\n $(this).css('display', 'none');\n $('.close').css('display', 'block');\n});\n\n$('.close').on('click', function (e) {\n e.preventDefault();\n $(this).parent('nav').css('left', '-75px');\n $(this).css('display', 'none');\n $('.burger').css('display', 'block');\n});\n\n$(window).resize(function () {\n if (window.matchMedia(\"(min-width: 768px)\").matches) {\n $('.burger').css('display', 'none');\n $('.close').css('display', 'none');\n $('nav').css('left', '0');\n } else {\n $('nav').css('left', '-75px');\n $('.burger').css('display', 'block');\n $('.close').css('display', 'none');\n }\n});\n\n$('#camp_type').on('change', function (event) {\n if ($(this).val() == 1 || $(this).val() == 3) {\n $('.limitPrinting').css('opacity', '1');\n } else {\n $('.limitPrinting').css('opacity', '0');\n }\n});\n\n$('#coupon_enablelimitquantity').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.enablelimitquantity').css('opacity', '1');\n } else {\n $('.enablelimitquantity').css('opacity', '0');\n }\n});\n\n$('#coupon_enablelimitperiod').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.enablelimitperiod').css('opacity', '1');\n } else {\n $('.enablelimitperiod').css('opacity', '0');\n }\n});\n\n$('#coupon_norme').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.gs1code').css('opacity', '1');\n } else {\n $('.gs1code').css('opacity', '0');\n }\n});\n\n$(document).ready(function () {\n if ($('#camp_type').val() == 1 || $('#camp_type').val() == 3) {\n $('.limitPrinting').css('opacity', '1');\n }\n if ($('#coupon_enablelimitquantity').is(':checked')) {\n $('.enablelimitquantity').css('opacity', '1');\n }\n if ($('#coupon_enablelimitperiod').is(':checked')) {\n $('.enablelimitperiod').css('opacity', '1');\n }\n if ($('#coupon_norme').is(':checked')) {\n $('.gs1code').css('opacity', '1');\n }\n});\n\n$('.addcalendar').on('click', function (event) {\n event.preventDefault();\n $('.calendar').append('
');\n});\n\n$('.calendar').on('click', '.removecalendar', function (event) {\n $(this).parent('.form-field-calendar').remove();\n});\n\n$('.add-mouvement-btn').on('click', function (event) {\n event.preventDefault();\n var element = $(this).parent().parent();\n var mouvementDate = element.find('#add-mouvement-date').val();\n var mouvementNbre = element.find('#add-mouvement-nbre').val();\n var html = \"\";\n html += \"\" + mouvementDate.split('-').reverse().join('/') + \" \";\n html += \"\" + mouvementNbre + \" \";\n html += \" \";\n $('.add-mouvement').before(html);\n});\n\n$('.contactWidgets').on('click', '.copy-url', function (event) {\n var animElement = $(this).parent().parent().find('.link-copied');\n var $tempElement = $(\" \");\n $(\"body\").append($tempElement);\n $tempElement.val($(this).text()).select();\n document.execCommand(\"Copy\");\n $tempElement.remove();\n animElement.animate({ opacity: 1 }, 200, function () {\n setTimeout(function () {\n animElement.animate({ opacity: 0 }, 1000);\n }, 500);\n });\n});\n\n// ---- DASHBOARD BUTTONS\n\n$('.campDetail .fa-angle-down').on('click', function (event) {\n var cpDiv = $(this).parent().parent().parent().find('.coupons');\n if (cpDiv.css('display') == 'none') {\n cpDiv.slideDown(500);\n } else {\n cpDiv.slideUp(500);\n }\n});\n\n$('.open-all').on('click', function (event) {\n event.preventDefault();\n $('.coupons').each(function () {\n $(this).slideDown(500);\n });\n});\n\n$('.close-all').on('click', function (event) {\n event.preventDefault();\n $('.coupons').each(function () {\n $(this).slideUp(500);\n });\n});\n\n// ---- ALERTE sur Campagne\n\n$('.couponDetail').each(function () {\n if ($(this).attr('data-printable') == 0) {\n console.log();\n $(this).parent().parent().parent().parent().find('.fa-exclamation-triangle').show();\n }\n});\n\n$('body').on('click', '.couponStats h4', function (event) {\n event.preventDefault();\n var contentDiv = $(this).parent().find('.content');\n\n if (contentDiv.css('display') == 'none') {\n contentDiv.slideDown();\n } else {\n contentDiv.slideUp();\n }\n});\n\n$('.open-all-stats').on('click', function (event) {\n event.preventDefault();\n $('.couponStats .content').each(function () {\n $(this).slideDown(500);\n });\n});\n\n$('.close-all-stats').on('click', function (event) {\n event.preventDefault();\n $('.couponStats .content').each(function () {\n $(this).slideUp(500);\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYXBwLmpzPzE3NTkiXSwibmFtZXMiOlsid2luZG93IiwiJCIsImpRdWVyeSIsInJlcXVpcmUiLCJlIiwiY2hhbmdlSWNvbiIsImRyb3BEb3duTWFycXVlIiwiZmFuY3lDb25maXJtIiwib3B0cyIsImV4dGVuZCIsInRpdGxlIiwibWVzc2FnZSIsIm9rQnV0dG9uIiwibm9CdXR0b24iLCJjYWxsYmFjayIsIm5vb3AiLCJmYW5jeWJveCIsIm9wZW4iLCJ0eXBlIiwic3JjIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJhbmltYXRpb25FZmZlY3QiLCJtb2RhbCIsImJhc2VUcGwiLCJhZnRlckNsb3NlIiwiaW5zdGFuY2UiLCJjdXJyZW50IiwiYnV0dG9uIiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsInZhbHVlIiwiZGF0YSIsImZhbmN5SW5mbyIsIm9uIiwiY3NzIiwic2xpZGVEb3duIiwic2xpZGVVcCIsImRlbGV0ZUljb25zIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY29uZmlybURlbGV0ZSIsInByZXZlbnREZWZhdWx0IiwidXJsIiwicGFyZW50RWxlbWVudCIsImhyZWYiLCJmb3JtIiwicXVlcnlTZWxlY3RvciIsImFjdGlvbiIsInN1Ym1pdCIsImZvckVhY2giLCJlbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYXJlbnQiLCJyZXNpemUiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImV2ZW50IiwidmFsIiwiaXMiLCJyZWFkeSIsImFwcGVuZCIsInJlbW92ZSIsImVsZW1lbnQiLCJtb3V2ZW1lbnREYXRlIiwiZmluZCIsIm1vdXZlbWVudE5icmUiLCJodG1sIiwic3BsaXQiLCJyZXZlcnNlIiwiam9pbiIsImJlZm9yZSIsImFuaW1FbGVtZW50IiwiJHRlbXBFbGVtZW50IiwidGV4dCIsInNlbGVjdCIsImV4ZWNDb21tYW5kIiwiYW5pbWF0ZSIsIm9wYWNpdHkiLCJzZXRUaW1lb3V0IiwiY3BEaXYi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eEMsTUFBRSx1QkFBRixFQUEyQitFLElBQTNCLENBQWdDLFlBQVU7QUFDdEMvRSxVQUFFLElBQUYsRUFBUWtDLFNBQVIsQ0FBa0IsR0FBbEI7QUFDSCxLQUZEO0FBR0gsQ0FMRDs7QUFPQWxDLEVBQUUsa0JBQUYsRUFBc0JnQyxFQUF0QixDQUF5QixPQUF6QixFQUFrQyxVQUFTdUIsS0FBVCxFQUFlO0FBQzdDQSxVQUFNZixjQUFOO0FBQ0F4QyxNQUFFLHVCQUFGLEVBQTJCK0UsSUFBM0IsQ0FBZ0MsWUFBVTtBQUN0Qy9FLFVBQUUsSUFBRixFQUFRbUMsT0FBUixDQUFnQixHQUFoQjtBQUNILEtBRkQ7QUFHSCxDQUxEIiwiZmlsZSI6IjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRmlyc3Qgd2Ugd2lsbCBsb2FkIGFsbCBvZiB0aGlzIHByb2plY3QncyBKYXZhU2NyaXB0IGRlcGVuZGVuY2llcyB3aGljaFxyXG4gKiBpbmNsdWRlcyBWdWUgYW5kIG90aGVyIGxpYnJhcmllcy4gSXQgaXMgYSBncmVhdCBzdGFydGluZyBwb2ludCB3aGVuXHJcbiAqIGJ1aWxkaW5nIHJvYnVzdCwgcG93ZXJmdWwgd2ViIGFwcGxpY2F0aW9ucyB1c2luZyBWdWUgYW5kIExhcmF2ZWwuXHJcbiAqL1xyXG5cclxuLypcclxucmVxdWlyZSgnLi9ib290c3RyYXAnKTtcclxuXHJcbndpbmRvdy5WdWUgPSByZXF1aXJlKCd2dWUnKTtcclxuXHJcbi8qKlxyXG4gKiBOZXh0LCB3ZSB3aWxsIGNyZWF0ZSBhIGZyZXNoIFZ1ZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSBhbmQgYXR0YWNoIGl0IHRvXHJcbiAqIHRoZSBwYWdlLiBUaGVuLCB5b3UgbWF5IGJlZ2luIGFkZGluZyBjb21wb25lbnRzIHRvIHRoaXMgYXBwbGljYXRpb25cclxuICogb3IgY3VzdG9taXplIHRoZSBKYXZhU2NyaXB0IHNjYWZmb2xkaW5nIHRvIGZpdCB5b3VyIHVuaXF1ZSBuZWVkcy5cclxuICovXHJcblxyXG4vKlxyXG5WdWUuY29tcG9uZW50KCdleGFtcGxlLWNvbXBvbmVudCcsIHJlcXVpcmUoJy4vY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZScpKTtcclxuXHJcbmNvbnN0IGFwcCA9IG5ldyBWdWUoe1xyXG4gICAgZWw6ICcjYXBwJ1xyXG59KTtcclxuKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnRyeSB7XHJcbiAgICB3aW5kb3cuJCA9IHdpbmRvdy5qUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKVxyXG59IGNhdGNoIChlKSB7fVxyXG5cclxuY29uc3QgY2hhbmdlSWNvbiA9ICQoJy5tYXJxdWUnKVxyXG5jb25zdCBkcm9wRG93bk1hcnF1ZSA9ICQoJy5tYXJxdWUtc2VsZWN0JylcclxuXHJcbi8vIEZhbmN5Qm94IENvbW11bmVzXHJcbi8vIENvbmZpcm1hdGlvbiBcclxuJC5mYW5jeUNvbmZpcm0gPSBmdW5jdGlvbiggb3B0cyApIHtcclxuICAgIG9wdHMgID0gJC5leHRlbmQoIHRydWUsIHtcclxuICAgICAgdGl0bGUgICAgIDogJ0FyZSB5b3Ugc3VyZT8nLFxyXG4gICAgICBtZXNzYWdlICAgOiAnJyxcclxuICAgICAgb2tCdXR0b24gIDogJ09LJyxcclxuICAgICAgbm9CdXR0b24gIDogJ0NhbmNlbCcsXHJcbiAgICAgIGNhbGxiYWNrICA6ICQubm9vcFxyXG4gICAgfSwgb3B0cyB8fCB7fSApO1xyXG4gIFxyXG4gICAgJC5mYW5jeWJveC5vcGVuKHtcclxuICAgICAgdHlwZSA6ICdodG1sJyxcclxuICAgICAgc3JjICA6XHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiZmMtY29udGVudFwiPicgK1xyXG4gICAgICAnPGgzPicgKyBvcHRzLnRpdGxlICAgKyAnPC9oMz4nICtcclxuICAgICAgJzxwPicgICsgb3B0cy5tZXNzYWdlICsgJzwvcD4nICtcclxuICAgICAgJzxwIGNsYXNzPVwidHJpZ2h0XCI+JyArXHJcbiAgICAgICc8YSBkYXRhLXZhbHVlPVwiMFwiIGRhdGEtZmFuY3lib3gtY2xvc2U+JyArIG9wdHMubm9CdXR0b24gKyAnPC9hPicgK1xyXG4gICAgICAnPGJ1dHRvbiBkYXRhLXZhbHVlPVwiMVwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJidG5cIj4nICsgb3B0cy5va0J1dHRvbiArICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvcD4nICtcclxuICAgICAgJzwvZGl2PicsXHJcbiAgICAgIG9wdHMgOiB7XHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb24gOiAzNTAsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0ICAgOiAnbWF0ZXJpYWwnLFxyXG4gICAgICAgIG1vZGFsIDogdHJ1ZSxcclxuICAgICAgICBiYXNlVHBsIDpcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWNvbnRhaW5lciBmYy1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtYmdcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWlubmVyXCI+JyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zdGFnZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICBhZnRlckNsb3NlIDogZnVuY3Rpb24oIGluc3RhbmNlLCBjdXJyZW50LCBlICkge1xyXG4gICAgICAgICAgdmFyIGJ1dHRvbiA9IGUgPyBlLnRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQgOiBudWxsO1xyXG4gICAgICAgICAgdmFyIHZhbHVlICA9IGJ1dHRvbiA/ICQoYnV0dG9uKS5kYXRhKCd2YWx1ZScpIDogMDtcclxuICBcclxuICAgICAgICAgIG9wdHMuY2FsbGJhY2soIHZhbHVlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4vLyBJbmZvcm1hdGlvbnNcclxuICAkLmZhbmN5SW5mbyA9IGZ1bmN0aW9uKCBvcHRzICkge1xyXG4gICAgb3B0cyAgPSAkLmV4dGVuZCggdHJ1ZSwge1xyXG4gICAgICB0aXRsZSAgICAgOiAnQXJlIHlvdSBzdXJlPycsXHJcbiAgICAgIG1lc3NhZ2UgICA6ICcnLFxyXG4gICAgICBva0J1dHRvbiAgOiAnT0snLFxyXG4gICAgICBub0J1dHRvbiAgOiAnQ2FuY2VsJyxcclxuICAgICAgY2FsbGJhY2sgIDogJC5ub29wXHJcbiAgICB9LCBvcHRzIHx8IHt9ICk7XHJcbiAgXHJcbiAgICAkLmZhbmN5Ym94Lm9wZW4oe1xyXG4gICAgICB0eXBlIDogJ2h0bWwnLFxyXG4gICAgICBzcmMgIDpcclxuICAgICAgJzxkaXYgY2xhc3M9XCJmYy1jb250ZW50XCI+JyArXHJcbiAgICAgICc8aDMgY2xhc3M9XCJpbmZvXCI+JyArIG9wdHMudGl0bGUgICArICc8L2gzPicgK1xyXG4gICAgICAnPHA+JyAgKyBvcHRzLm1lc3NhZ2UgKyAnPC9wPicgK1xyXG4gICAgICAnPHAgY2xhc3M9XCJ0cmlnaHRcIj4nICtcclxuICAgICAgJzxhIGRhdGEtdmFsdWU9XCIwXCIgZGF0YS1mYW5jeWJveC1jbG9zZT4nICsgb3B0cy5ub0J1dHRvbiArICc8L2E+JyArIFxyXG4gICAgICAnPGJ1dHRvbiBkYXRhLXZhbHVlPVwiMVwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJidG5cIj4nICsgb3B0cy5va0J1dHRvbiArICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvcD4nICtcclxuICAgICAgJzwvZGl2PicsXHJcbiAgICAgIG9wdHMgOiB7XHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb24gOiAzNTAsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0ICAgOiAnbWF0ZXJpYWwnLFxyXG4gICAgICAgIG1vZGFsIDogdHJ1ZSxcclxuICAgICAgICBiYXNlVHBsIDpcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWNvbnRhaW5lciBmYy1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtYmdcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWlubmVyXCI+JyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zdGFnZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICBhZnRlckNsb3NlIDogZnVuY3Rpb24oIGluc3RhbmNlLCBjdXJyZW50LCBlICkge1xyXG4gICAgICAgICAgdmFyIGJ1dHRvbiA9IGUgPyBlLnRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQgOiBudWxsO1xyXG4gICAgICAgICAgdmFyIHZhbHVlICA9IGJ1dHRvbiA/ICQoYnV0dG9uKS5kYXRhKCd2YWx1ZScpIDogMDtcclxuICAgICAgICAgIG9wdHMuY2FsbGJhY2soIHZhbHVlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuY2hhbmdlSWNvbi5vbignY2xpY2snLCAoKSA9PiB7XHJcbiAgICBpZihkcm9wRG93bk1hcnF1ZS5jc3MoJ2Rpc3BsYXknKSA9PSBcIm5vbmVcIil7XHJcbiAgICAgICAgZHJvcERvd25NYXJxdWUuc2xpZGVEb3duKCdmYXN0Jyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRyb3BEb3duTWFycXVlLnNsaWRlVXAoJ2Zhc3QnKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBkZWxldGVJY29ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZWxldGUtaWNvbicpXHJcblxyXG5sZXQgY29uZmlybURlbGV0ZSA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIGxldCB1cmwgPSBlLnRhcmdldC5wYXJlbnRFbGVtZW50LmhyZWZcclxuICAgIGxldCBmb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RlbGV0ZS1oaWRkZW4nKVxyXG5cclxuICAgICQuZmFuY3lDb25maXJtKHtcclxuICAgICAgICB0aXRsZSAgICAgOiBcIjxpIGNsYXNzPSdmYXMgZmEtdGltZXMtY2lyY2xlJz48L2k+IFN1cHByZXNzaW9uXCIsXHJcbiAgICAgICAgbWVzc2FnZSAgIDogXCLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBlZmZhY2VyIGNldCDDqWzDqW1lbnQgP1wiLFxyXG4gICAgICAgIG9rQnV0dG9uICA6ICdTdXBwcmltZXInLFxyXG4gICAgICAgIG5vQnV0dG9uICA6ICdBbm51bGVyJyxcclxuICAgICAgICBjYWxsYmFjayAgOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3JtLmFjdGlvbiA9IHVybFxyXG4gICAgICAgICAgICBmb3JtLnN1Ym1pdCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxufVxyXG5cclxuZGVsZXRlSWNvbnMuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY29uZmlybURlbGV0ZSlcclxufSlcclxuXHJcblxyXG4kKCcuYnVyZ2VyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnbmF2JykuY3NzKCdsZWZ0JywgJzAnKTtcclxuICAgICQodGhpcykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICQoJy5jbG9zZScpLmNzcygnZGlzcGxheScsICdibG9jaycpO1xyXG59KVxyXG5cclxuJCgnLmNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnbmF2JykuY3NzKCdsZWZ0JywgJy03NXB4Jyk7XHJcbiAgICAkKHRoaXMpLmNzcygnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAkKCcuYnVyZ2VyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbn0pXHJcblxyXG4kKCB3aW5kb3cgKS5yZXNpemUoZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEoXCIobWluLXdpZHRoOiA3NjhweClcIikubWF0Y2hlcykge1xyXG4gICAgICAgICQoJy5idXJnZXInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgICQoJy5jbG9zZScpLmNzcygnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAgICAgJCgnbmF2JykuY3NzKCdsZWZ0JywgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkKCduYXYnKS5jc3MoJ2xlZnQnLCAnLTc1cHgnKTtcclxuICAgICAgICAkKCcuYnVyZ2VyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICAgICAgJCgnLmNsb3NlJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgfVxyXG59KTtcclxuXHJcbiQoJyNjYW1wX3R5cGUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgaWYoJCh0aGlzKS52YWwoKSA9PSAxIHx8ICQodGhpcykudmFsKCkgPT0gMyl7XHJcbiAgICAgICAgJCgnLmxpbWl0UHJpbnRpbmcnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAkKCcubGltaXRQcmludGluZycpLmNzcygnb3BhY2l0eScsICcwJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuJCgnI2NvdXBvbl9lbmFibGVsaW1pdHF1YW50aXR5Jykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5lbmFibGVsaW1pdHF1YW50aXR5JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cXVhbnRpdHknKS5jc3MoJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbiQoJyNjb3Vwb25fZW5hYmxlbGltaXRwZXJpb2QnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgaWYoJCh0aGlzKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzAnKTtcclxuICAgIH1cclxufSk7XHJcblxyXG4kKCcjY291cG9uX25vcm1lJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5nczFjb2RlJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmdzMWNvZGUnKS5jc3MoJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XHJcbiAgICBpZigkKCcjY2FtcF90eXBlJykudmFsKCkgPT0gMSB8fCAkKCcjY2FtcF90eXBlJykudmFsKCkgPT0gMyl7XHJcbiAgICAgICAgJCgnLmxpbWl0UHJpbnRpbmcnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfVxyXG4gICAgaWYoJCgnI2NvdXBvbl9lbmFibGVsaW1pdHF1YW50aXR5JykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5lbmFibGVsaW1pdHF1YW50aXR5JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH1cclxuICAgIGlmKCQoJyNjb3Vwb25fZW5hYmxlbGltaXRwZXJpb2QnKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH1cclxuICAgIGlmKCQoJyNjb3Vwb25fbm9ybWUnKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmdzMWNvZGUnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuJCgnLmFkZGNhbGVuZGFyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jYWxlbmRhcicpLmFwcGVuZCgnPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtY2FsZW5kYXJcIj48aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwic3RhcnRkYXRlW11cIj48aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwiZW5kZGF0ZVtdXCI+PGkgY2xhc3M9XCJmYXMgZmEtbWludXMtc3F1YXJlIHJlbW92ZWNhbGVuZGFyXCI+PC9pPjwvZGl2PicpO1xyXG59KTtcclxuXHJcbiQoJy5jYWxlbmRhcicpLm9uKCdjbGljaycsICcucmVtb3ZlY2FsZW5kYXInLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnLmZvcm0tZmllbGQtY2FsZW5kYXInKS5yZW1vdmUoKTtcclxufSlcclxuXHJcbiQoJy5hZGQtbW91dmVtZW50LWJ0bicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB2YXIgZWxlbWVudCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICB2YXIgbW91dmVtZW50RGF0ZSA9IGVsZW1lbnQuZmluZCgnI2FkZC1tb3V2ZW1lbnQtZGF0ZScpLnZhbCgpO1xyXG4gICAgdmFyIG1vdXZlbWVudE5icmUgPSBlbGVtZW50LmZpbmQoJyNhZGQtbW91dmVtZW50LW5icmUnKS52YWwoKTtcclxuICAgIHZhciBodG1sID0gXCI8dHI+XCI7XHJcbiAgICBodG1sICs9IFwiPHRoPlwiK21vdXZlbWVudERhdGUuc3BsaXQoJy0nKS5yZXZlcnNlKCkuam9pbignLycpK1wiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nbW91dmVtZW50RGF0ZVtdJyB2YWx1ZT0nXCIrbW91dmVtZW50RGF0ZStcIic+PC90aD5cIjtcclxuICAgIGh0bWwgKz0gXCI8dGg+XCIrbW91dmVtZW50TmJyZStcIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J21vdXZlbWVudE5icmVbXScgdmFsdWU9J1wiK21vdXZlbWVudE5icmUrXCInPjwvdGg+XCI7XHJcbiAgICBodG1sICs9IFwiPHRoPjwvdGg+PC90cj5cIjtcclxuICAgICQoJy5hZGQtbW91dmVtZW50JykuYmVmb3JlKGh0bWwpO1xyXG59KVxyXG5cclxuXHJcbiQoJy5jb250YWN0V2lkZ2V0cycpLm9uKCdjbGljaycsICcuY29weS11cmwnLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICB2YXIgYW5pbUVsZW1lbnQgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5saW5rLWNvcGllZCcpO1xyXG4gICAgdmFyICR0ZW1wRWxlbWVudCA9ICQoXCI8aW5wdXQ+XCIpO1xyXG4gICAgJChcImJvZHlcIikuYXBwZW5kKCR0ZW1wRWxlbWVudCk7XHJcbiAgICAkdGVtcEVsZW1lbnQudmFsKCQodGhpcykudGV4dCgpKS5zZWxlY3QoKTtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiQ29weVwiKTtcclxuICAgICR0ZW1wRWxlbWVudC5yZW1vdmUoKTtcclxuICAgIGFuaW1FbGVtZW50LmFuaW1hdGUoe29wYWNpdHk6IDF9LCAyMDAsIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBhbmltRWxlbWVudC5hbmltYXRlKHtvcGFjaXR5OiAwfSwgMTAwMCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG5cclxuLy8gLS0tLSBEQVNIQk9BUkQgQlVUVE9OU1xyXG5cclxuJCgnLmNhbXBEZXRhaWwgLmZhLWFuZ2xlLWRvd24nKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICB2YXIgY3BEaXYgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5jb3Vwb25zJyk7XHJcbiAgICBpZihjcERpdi5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpe1xyXG4gICAgICAgIGNwRGl2LnNsaWRlRG93big1MDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjcERpdi5zbGlkZVVwKDUwMCk7XHJcbiAgICB9XHJcbn0pXHJcblxyXG4kKCcub3Blbi1hbGwnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgJCgnLmNvdXBvbnMnKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgJCh0aGlzKS5zbGlkZURvd24oNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4kKCcuY2xvc2UtYWxsJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jb3Vwb25zJykuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICQodGhpcykuc2xpZGVVcCg1MDApO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC0tLS0gQUxFUlRFIHN1ciBDYW1wYWduZVxyXG5cclxuJCgnLmNvdXBvbkRldGFpbCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgIGlmKCQodGhpcykuYXR0cignZGF0YS1wcmludGFibGUnKSA9PSAwKXtcclxuICAgICAgICBjb25zb2xlLmxvZygpO1xyXG4gICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkuZmluZCgnLmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJykuc2hvdygpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuXHJcbiQoJ2JvZHknKS5vbignY2xpY2snLCAnLmNvdXBvblN0YXRzIGg0JywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHZhciBjb250ZW50RGl2ID0gJCh0aGlzKS5wYXJlbnQoKS5maW5kKCcuY29udGVudCcpXHJcblxyXG4gICAgaWYoY29udGVudERpdi5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpe1xyXG4gICAgICAgIGNvbnRlbnREaXYuc2xpZGVEb3duKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRlbnREaXYuc2xpZGVVcCgpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuJCgnLm9wZW4tYWxsLXN0YXRzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jb3Vwb25TdGF0cyAuY29udGVudCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgICAgICAkKHRoaXMpLnNsaWRlRG93big1MDApO1xyXG4gICAgfSlcclxufSlcclxuXHJcbiQoJy5jbG9zZS1hbGwtc3RhdHMnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgJCgnLmNvdXBvblN0YXRzIC5jb250ZW50JykuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICQodGhpcykuc2xpZGVVcCg1MDApO1xyXG4gICAgfSlcclxufSlcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yZXNvdXJjZXMvanMvYXBwLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1\n");
+eval("/**\r\n * First we will load all of this project's JavaScript dependencies which\r\n * includes Vue and other libraries. It is a great starting point when\r\n * building robust, powerful web applications using Vue and Laravel.\r\n */\n\n/*\r\nrequire('./bootstrap');\r\n\r\nwindow.Vue = require('vue');\r\n\r\n/**\r\n * Next, we will create a fresh Vue application instance and attach it to\r\n * the page. Then, you may begin adding components to this application\r\n * or customize the JavaScript scaffolding to fit your unique needs.\r\n */\n\n/*\r\nVue.component('example-component', require('./components/ExampleComponent.vue'));\r\n\r\nconst app = new Vue({\r\n el: '#app'\r\n});\r\n*/\n\n\n\ntry {\n window.$ = window.jQuery = __webpack_require__(2);\n} catch (e) {}\n\nvar changeIcon = $('.marque');\nvar dropDownMarque = $('.marque-select');\n\n// FancyBox Communes\n// Confirmation \n$.fancyConfirm = function (opts) {\n opts = $.extend(true, {\n title: 'Are you sure?',\n message: '',\n okButton: 'OK',\n noButton: 'Cancel',\n callback: $.noop\n }, opts || {});\n\n $.fancybox.open({\n type: 'html',\n src: '' + '
' + opts.title + ' ' + '
' + opts.message + '
' + '
' + '' + opts.noButton + ' ' + '' + opts.okButton + ' ' + '
' + '
',\n opts: {\n animationDuration: 350,\n animationEffect: 'material',\n modal: true,\n baseTpl: '',\n afterClose: function afterClose(instance, current, e) {\n var button = e ? e.target || e.currentTarget : null;\n var value = button ? $(button).data('value') : 0;\n\n opts.callback(value);\n }\n }\n });\n};\n\n// Informations\n$.fancyInfo = function (opts) {\n opts = $.extend(true, {\n title: 'Are you sure?',\n message: '',\n okButton: 'OK',\n noButton: 'Cancel',\n callback: $.noop\n }, opts || {});\n\n $.fancybox.open({\n type: 'html',\n src: '' + '
' + opts.title + ' ' + '
' + opts.message + '
' + '
' + '' + opts.noButton + ' ' + '' + opts.okButton + ' ' + '
' + '
',\n opts: {\n animationDuration: 350,\n animationEffect: 'material',\n modal: true,\n baseTpl: '',\n afterClose: function afterClose(instance, current, e) {\n var button = e ? e.target || e.currentTarget : null;\n var value = button ? $(button).data('value') : 0;\n opts.callback(value);\n }\n }\n });\n};\n\nchangeIcon.on('click', function () {\n if (dropDownMarque.css('display') == \"none\") {\n dropDownMarque.slideDown('fast');\n } else {\n dropDownMarque.slideUp('fast');\n }\n});\n\nvar deleteIcons = document.querySelectorAll('.delete-icon');\n\nvar confirmDelete = function confirmDelete(e) {\n e.preventDefault();\n var url = e.target.parentElement.href;\n var form = document.querySelector('#delete-hidden');\n\n $.fancyConfirm({\n title: \" Suppression\",\n message: \"Êtes-vous sûr de vouloir effacer cet élément ?\",\n okButton: 'Supprimer',\n noButton: 'Annuler',\n callback: function callback(value) {\n if (value) {\n form.action = url;\n form.submit();\n }\n }\n });\n};\n\ndeleteIcons.forEach(function (el) {\n el.addEventListener('click', confirmDelete);\n});\n\n$('.burger').on('click', function (e) {\n e.preventDefault();\n $(this).parent('nav').css('left', '0');\n $(this).css('display', 'none');\n $('.close').css('display', 'block');\n});\n\n$('.close').on('click', function (e) {\n e.preventDefault();\n $(this).parent('nav').css('left', '-75px');\n $(this).css('display', 'none');\n $('.burger').css('display', 'block');\n});\n\n$(window).resize(function () {\n if (window.matchMedia(\"(min-width: 768px)\").matches) {\n $('.burger').css('display', 'none');\n $('.close').css('display', 'none');\n $('nav').css('left', '0');\n } else {\n $('nav').css('left', '-75px');\n $('.burger').css('display', 'block');\n $('.close').css('display', 'none');\n }\n});\n\n$('#camp_type').on('change', function (event) {\n if ($(this).val() == 1 || $(this).val() == 3) {\n $('.limitPrinting').css('opacity', '1');\n } else {\n $('.limitPrinting').css('opacity', '0');\n }\n});\n\n$('#coupon_enablelimitquantity').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.enablelimitquantity').css('opacity', '1');\n } else {\n $('.enablelimitquantity').css('opacity', '0');\n }\n});\n\n$('#coupon_enablelimitperiod').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.enablelimitperiod').css('opacity', '1');\n } else {\n $('.enablelimitperiod').css('opacity', '0');\n }\n});\n\n$('#coupon_norme').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.gs1code').css('opacity', '1');\n } else {\n $('.gs1code').css('opacity', '0');\n }\n});\n\n$(document).ready(function () {\n if ($('#camp_type').val() == 1 || $('#camp_type').val() == 3) {\n $('.limitPrinting').css('opacity', '1');\n }\n if ($('#coupon_enablelimitquantity').is(':checked')) {\n $('.enablelimitquantity').css('opacity', '1');\n }\n if ($('#coupon_enablelimitperiod').is(':checked')) {\n $('.enablelimitperiod').css('opacity', '1');\n }\n if ($('#coupon_norme').is(':checked')) {\n $('.gs1code').css('opacity', '1');\n }\n});\n\n$('.addcalendar').on('click', function (event) {\n event.preventDefault();\n $('.calendar').append('
');\n});\n\n$('.calendar').on('click', '.removecalendar', function (event) {\n $(this).parent('.form-field-calendar').remove();\n});\n\n$('.add-mouvement-btn').on('click', function (event) {\n event.preventDefault();\n var element = $(this).parent().parent();\n var mouvementDate = element.find('#add-mouvement-date').val();\n var mouvementNbre = element.find('#add-mouvement-nbre').val();\n var html = \"\";\n html += \"\" + mouvementDate.split('-').reverse().join('/') + \" \";\n html += \"\" + mouvementNbre + \" \";\n html += \" \";\n $('.add-mouvement').before(html);\n});\n\n$('.contactWidgets').on('click', '.copy-url', function (event) {\n var animElement = $(this).parent().parent().find('.link-copied');\n var $tempElement = $(\" \");\n $(\"body\").append($tempElement);\n $tempElement.val($(this).text()).select();\n document.execCommand(\"Copy\");\n $tempElement.remove();\n animElement.animate({ opacity: 1 }, 200, function () {\n setTimeout(function () {\n animElement.animate({ opacity: 0 }, 1000);\n }, 500);\n });\n});\n\n// ---- DASHBOARD BUTTONS\n\n$('.campDetail .fa-angle-down').on('click', function (event) {\n var cpDiv = $(this).parent().parent().parent().find('.coupons');\n if (cpDiv.css('display') == 'none') {\n cpDiv.slideDown(500);\n } else {\n cpDiv.slideUp(500);\n }\n});\n\n$('.open-all').on('click', function (event) {\n event.preventDefault();\n $('.coupons').each(function () {\n $(this).slideDown(500);\n });\n});\n\n$('.close-all').on('click', function (event) {\n event.preventDefault();\n $('.coupons').each(function () {\n $(this).slideUp(500);\n });\n});\n\n// ---- ALERTE sur Campagne\n\n$('.couponDetail').each(function () {\n if ($(this).attr('data-printable') == 0) {\n console.log();\n $(this).parent().parent().parent().parent().find('.fa-exclamation-triangle').show();\n }\n});\n\n$('body').on('click', '.expand', function (event) {\n event.preventDefault();\n var contentDiv = $(this).parent().parent().find('.content');\n\n if (contentDiv.css('display') == 'none') {\n contentDiv.slideDown();\n } else {\n contentDiv.slideUp();\n }\n});\n\n$('.open-all-stats').on('click', function (event) {\n event.preventDefault();\n $('.couponStats .content').each(function () {\n $(this).slideDown(500);\n });\n});\n\n$('.close-all-stats').on('click', function (event) {\n event.preventDefault();\n $('.couponStats .content').each(function () {\n $(this).slideUp(500);\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYXBwLmpzPzE3NTkiXSwibmFtZXMiOlsid2luZG93IiwiJCIsImpRdWVyeSIsInJlcXVpcmUiLCJlIiwiY2hhbmdlSWNvbiIsImRyb3BEb3duTWFycXVlIiwiZmFuY3lDb25maXJtIiwib3B0cyIsImV4dGVuZCIsInRpdGxlIiwibWVzc2FnZSIsIm9rQnV0dG9uIiwibm9CdXR0b24iLCJjYWxsYmFjayIsIm5vb3AiLCJmYW5jeWJveCIsIm9wZW4iLCJ0eXBlIiwic3JjIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJhbmltYXRpb25FZmZlY3QiLCJtb2RhbCIsImJhc2VUcGwiLCJhZnRlckNsb3NlIiwiaW5zdGFuY2UiLCJjdXJyZW50IiwiYnV0dG9uIiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsInZhbHVlIiwiZGF0YSIsImZhbmN5SW5mbyIsIm9uIiwiY3NzIiwic2xpZGVEb3duIiwic2xpZGVVcCIsImRlbGV0ZUljb25zIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY29uZmlybURlbGV0ZSIsInByZXZlbnREZWZhdWx0IiwidXJsIiwicGFyZW50RWxlbWVudCIsImhyZWYiLCJmb3JtIiwicXVlcnlTZWxlY3RvciIsImFjdGlvbiIsInN1Ym1pdCIsImZvckVhY2giLCJlbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYXJlbnQiLCJyZXNpemUiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImV2ZW50IiwidmFsIiwiaXMiLCJyZWFkeSIsImFwcGVuZCIsInJlbW92ZSIsImVsZW1lbnQiLCJtb3V2ZW1lbnREYXRlIiwiZmluZCIsIm1vdXZlbWVudE5icmUiLCJodG1sIiwic3BsaXQiLCJyZXZlcnNlIiwiam9pbiIsImJlZm9yZSIsImFuaW1FbGVtZW50IiwiJHRlbXBFbGVtZW50IiwidGV4dCIsInNlbGVjdCIsImV4ZWNDb21tYW5kIiwiYW5pbWF0ZSIsIm9wYWNpdHkiLCJzZXRUaW1lb3V0IiwiY3BEaXYi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TWYsY0FBTjtBQUNBeEMsTUFBRSx1QkFBRixFQUEyQitFLElBQTNCLENBQWdDLFlBQVU7QUFDdEMvRSxVQUFFLElBQUYsRUFBUWtDLFNBQVIsQ0FBa0IsR0FBbEI7QUFDSCxLQUZEO0FBR0gsQ0FMRDs7QUFPQWxDLEVBQUUsa0JBQUYsRUFBc0JnQyxFQUF0QixDQUF5QixPQUF6QixFQUFrQyxVQUFTdUIsS0FBVCxFQUFlO0FBQzdDQSxVQUFNZixjQUFOO0FBQ0F4QyxNQUFFLHVCQUFGLEVBQTJCK0UsSUFBM0IsQ0FBZ0MsWUFBVTtBQUN0Qy9FLFVBQUUsSUFBRixFQUFRbUMsT0FBUixDQUFnQixHQUFoQjtBQUNILEtBRkQ7QUFHSCxDQUxEIiwiZmlsZSI6IjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRmlyc3Qgd2Ugd2lsbCBsb2FkIGFsbCBvZiB0aGlzIHByb2plY3QncyBKYXZhU2NyaXB0IGRlcGVuZGVuY2llcyB3aGljaFxyXG4gKiBpbmNsdWRlcyBWdWUgYW5kIG90aGVyIGxpYnJhcmllcy4gSXQgaXMgYSBncmVhdCBzdGFydGluZyBwb2ludCB3aGVuXHJcbiAqIGJ1aWxkaW5nIHJvYnVzdCwgcG93ZXJmdWwgd2ViIGFwcGxpY2F0aW9ucyB1c2luZyBWdWUgYW5kIExhcmF2ZWwuXHJcbiAqL1xyXG5cclxuLypcclxucmVxdWlyZSgnLi9ib290c3RyYXAnKTtcclxuXHJcbndpbmRvdy5WdWUgPSByZXF1aXJlKCd2dWUnKTtcclxuXHJcbi8qKlxyXG4gKiBOZXh0LCB3ZSB3aWxsIGNyZWF0ZSBhIGZyZXNoIFZ1ZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSBhbmQgYXR0YWNoIGl0IHRvXHJcbiAqIHRoZSBwYWdlLiBUaGVuLCB5b3UgbWF5IGJlZ2luIGFkZGluZyBjb21wb25lbnRzIHRvIHRoaXMgYXBwbGljYXRpb25cclxuICogb3IgY3VzdG9taXplIHRoZSBKYXZhU2NyaXB0IHNjYWZmb2xkaW5nIHRvIGZpdCB5b3VyIHVuaXF1ZSBuZWVkcy5cclxuICovXHJcblxyXG4vKlxyXG5WdWUuY29tcG9uZW50KCdleGFtcGxlLWNvbXBvbmVudCcsIHJlcXVpcmUoJy4vY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZScpKTtcclxuXHJcbmNvbnN0IGFwcCA9IG5ldyBWdWUoe1xyXG4gICAgZWw6ICcjYXBwJ1xyXG59KTtcclxuKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnRyeSB7XHJcbiAgICB3aW5kb3cuJCA9IHdpbmRvdy5qUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKVxyXG59IGNhdGNoIChlKSB7fVxyXG5cclxuY29uc3QgY2hhbmdlSWNvbiA9ICQoJy5tYXJxdWUnKVxyXG5jb25zdCBkcm9wRG93bk1hcnF1ZSA9ICQoJy5tYXJxdWUtc2VsZWN0JylcclxuXHJcbi8vIEZhbmN5Qm94IENvbW11bmVzXHJcbi8vIENvbmZpcm1hdGlvbiBcclxuJC5mYW5jeUNvbmZpcm0gPSBmdW5jdGlvbiggb3B0cyApIHtcclxuICAgIG9wdHMgID0gJC5leHRlbmQoIHRydWUsIHtcclxuICAgICAgdGl0bGUgICAgIDogJ0FyZSB5b3Ugc3VyZT8nLFxyXG4gICAgICBtZXNzYWdlICAgOiAnJyxcclxuICAgICAgb2tCdXR0b24gIDogJ09LJyxcclxuICAgICAgbm9CdXR0b24gIDogJ0NhbmNlbCcsXHJcbiAgICAgIGNhbGxiYWNrICA6ICQubm9vcFxyXG4gICAgfSwgb3B0cyB8fCB7fSApO1xyXG4gIFxyXG4gICAgJC5mYW5jeWJveC5vcGVuKHtcclxuICAgICAgdHlwZSA6ICdodG1sJyxcclxuICAgICAgc3JjICA6XHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiZmMtY29udGVudFwiPicgK1xyXG4gICAgICAnPGgzPicgKyBvcHRzLnRpdGxlICAgKyAnPC9oMz4nICtcclxuICAgICAgJzxwPicgICsgb3B0cy5tZXNzYWdlICsgJzwvcD4nICtcclxuICAgICAgJzxwIGNsYXNzPVwidHJpZ2h0XCI+JyArXHJcbiAgICAgICc8YSBkYXRhLXZhbHVlPVwiMFwiIGRhdGEtZmFuY3lib3gtY2xvc2U+JyArIG9wdHMubm9CdXR0b24gKyAnPC9hPicgK1xyXG4gICAgICAnPGJ1dHRvbiBkYXRhLXZhbHVlPVwiMVwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJidG5cIj4nICsgb3B0cy5va0J1dHRvbiArICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvcD4nICtcclxuICAgICAgJzwvZGl2PicsXHJcbiAgICAgIG9wdHMgOiB7XHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb24gOiAzNTAsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0ICAgOiAnbWF0ZXJpYWwnLFxyXG4gICAgICAgIG1vZGFsIDogdHJ1ZSxcclxuICAgICAgICBiYXNlVHBsIDpcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWNvbnRhaW5lciBmYy1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtYmdcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWlubmVyXCI+JyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zdGFnZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICBhZnRlckNsb3NlIDogZnVuY3Rpb24oIGluc3RhbmNlLCBjdXJyZW50LCBlICkge1xyXG4gICAgICAgICAgdmFyIGJ1dHRvbiA9IGUgPyBlLnRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQgOiBudWxsO1xyXG4gICAgICAgICAgdmFyIHZhbHVlICA9IGJ1dHRvbiA/ICQoYnV0dG9uKS5kYXRhKCd2YWx1ZScpIDogMDtcclxuICBcclxuICAgICAgICAgIG9wdHMuY2FsbGJhY2soIHZhbHVlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4vLyBJbmZvcm1hdGlvbnNcclxuICAkLmZhbmN5SW5mbyA9IGZ1bmN0aW9uKCBvcHRzICkge1xyXG4gICAgb3B0cyAgPSAkLmV4dGVuZCggdHJ1ZSwge1xyXG4gICAgICB0aXRsZSAgICAgOiAnQXJlIHlvdSBzdXJlPycsXHJcbiAgICAgIG1lc3NhZ2UgICA6ICcnLFxyXG4gICAgICBva0J1dHRvbiAgOiAnT0snLFxyXG4gICAgICBub0J1dHRvbiAgOiAnQ2FuY2VsJyxcclxuICAgICAgY2FsbGJhY2sgIDogJC5ub29wXHJcbiAgICB9LCBvcHRzIHx8IHt9ICk7XHJcbiAgXHJcbiAgICAkLmZhbmN5Ym94Lm9wZW4oe1xyXG4gICAgICB0eXBlIDogJ2h0bWwnLFxyXG4gICAgICBzcmMgIDpcclxuICAgICAgJzxkaXYgY2xhc3M9XCJmYy1jb250ZW50XCI+JyArXHJcbiAgICAgICc8aDMgY2xhc3M9XCJpbmZvXCI+JyArIG9wdHMudGl0bGUgICArICc8L2gzPicgK1xyXG4gICAgICAnPHA+JyAgKyBvcHRzLm1lc3NhZ2UgKyAnPC9wPicgK1xyXG4gICAgICAnPHAgY2xhc3M9XCJ0cmlnaHRcIj4nICtcclxuICAgICAgJzxhIGRhdGEtdmFsdWU9XCIwXCIgZGF0YS1mYW5jeWJveC1jbG9zZT4nICsgb3B0cy5ub0J1dHRvbiArICc8L2E+JyArIFxyXG4gICAgICAnPGJ1dHRvbiBkYXRhLXZhbHVlPVwiMVwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJidG5cIj4nICsgb3B0cy5va0J1dHRvbiArICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvcD4nICtcclxuICAgICAgJzwvZGl2PicsXHJcbiAgICAgIG9wdHMgOiB7XHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb24gOiAzNTAsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0ICAgOiAnbWF0ZXJpYWwnLFxyXG4gICAgICAgIG1vZGFsIDogdHJ1ZSxcclxuICAgICAgICBiYXNlVHBsIDpcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWNvbnRhaW5lciBmYy1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtYmdcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWlubmVyXCI+JyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zdGFnZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICBhZnRlckNsb3NlIDogZnVuY3Rpb24oIGluc3RhbmNlLCBjdXJyZW50LCBlICkge1xyXG4gICAgICAgICAgdmFyIGJ1dHRvbiA9IGUgPyBlLnRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQgOiBudWxsO1xyXG4gICAgICAgICAgdmFyIHZhbHVlICA9IGJ1dHRvbiA/ICQoYnV0dG9uKS5kYXRhKCd2YWx1ZScpIDogMDtcclxuICAgICAgICAgIG9wdHMuY2FsbGJhY2soIHZhbHVlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuY2hhbmdlSWNvbi5vbignY2xpY2snLCAoKSA9PiB7XHJcbiAgICBpZihkcm9wRG93bk1hcnF1ZS5jc3MoJ2Rpc3BsYXknKSA9PSBcIm5vbmVcIil7XHJcbiAgICAgICAgZHJvcERvd25NYXJxdWUuc2xpZGVEb3duKCdmYXN0Jyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRyb3BEb3duTWFycXVlLnNsaWRlVXAoJ2Zhc3QnKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBkZWxldGVJY29ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZWxldGUtaWNvbicpXHJcblxyXG5sZXQgY29uZmlybURlbGV0ZSA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIGxldCB1cmwgPSBlLnRhcmdldC5wYXJlbnRFbGVtZW50LmhyZWZcclxuICAgIGxldCBmb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RlbGV0ZS1oaWRkZW4nKVxyXG5cclxuICAgICQuZmFuY3lDb25maXJtKHtcclxuICAgICAgICB0aXRsZSAgICAgOiBcIjxpIGNsYXNzPSdmYXMgZmEtdGltZXMtY2lyY2xlJz48L2k+IFN1cHByZXNzaW9uXCIsXHJcbiAgICAgICAgbWVzc2FnZSAgIDogXCLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBlZmZhY2VyIGNldCDDqWzDqW1lbnQgP1wiLFxyXG4gICAgICAgIG9rQnV0dG9uICA6ICdTdXBwcmltZXInLFxyXG4gICAgICAgIG5vQnV0dG9uICA6ICdBbm51bGVyJyxcclxuICAgICAgICBjYWxsYmFjayAgOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3JtLmFjdGlvbiA9IHVybFxyXG4gICAgICAgICAgICBmb3JtLnN1Ym1pdCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxufVxyXG5cclxuZGVsZXRlSWNvbnMuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY29uZmlybURlbGV0ZSlcclxufSlcclxuXHJcblxyXG4kKCcuYnVyZ2VyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnbmF2JykuY3NzKCdsZWZ0JywgJzAnKTtcclxuICAgICQodGhpcykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICQoJy5jbG9zZScpLmNzcygnZGlzcGxheScsICdibG9jaycpO1xyXG59KVxyXG5cclxuJCgnLmNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnbmF2JykuY3NzKCdsZWZ0JywgJy03NXB4Jyk7XHJcbiAgICAkKHRoaXMpLmNzcygnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAkKCcuYnVyZ2VyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbn0pXHJcblxyXG4kKCB3aW5kb3cgKS5yZXNpemUoZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEoXCIobWluLXdpZHRoOiA3NjhweClcIikubWF0Y2hlcykge1xyXG4gICAgICAgICQoJy5idXJnZXInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgICQoJy5jbG9zZScpLmNzcygnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAgICAgJCgnbmF2JykuY3NzKCdsZWZ0JywgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkKCduYXYnKS5jc3MoJ2xlZnQnLCAnLTc1cHgnKTtcclxuICAgICAgICAkKCcuYnVyZ2VyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICAgICAgJCgnLmNsb3NlJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgfVxyXG59KTtcclxuXHJcbiQoJyNjYW1wX3R5cGUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgaWYoJCh0aGlzKS52YWwoKSA9PSAxIHx8ICQodGhpcykudmFsKCkgPT0gMyl7XHJcbiAgICAgICAgJCgnLmxpbWl0UHJpbnRpbmcnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAkKCcubGltaXRQcmludGluZycpLmNzcygnb3BhY2l0eScsICcwJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuJCgnI2NvdXBvbl9lbmFibGVsaW1pdHF1YW50aXR5Jykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5lbmFibGVsaW1pdHF1YW50aXR5JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cXVhbnRpdHknKS5jc3MoJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbiQoJyNjb3Vwb25fZW5hYmxlbGltaXRwZXJpb2QnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgaWYoJCh0aGlzKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzAnKTtcclxuICAgIH1cclxufSk7XHJcblxyXG4kKCcjY291cG9uX25vcm1lJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5nczFjb2RlJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmdzMWNvZGUnKS5jc3MoJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XHJcbiAgICBpZigkKCcjY2FtcF90eXBlJykudmFsKCkgPT0gMSB8fCAkKCcjY2FtcF90eXBlJykudmFsKCkgPT0gMyl7XHJcbiAgICAgICAgJCgnLmxpbWl0UHJpbnRpbmcnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfVxyXG4gICAgaWYoJCgnI2NvdXBvbl9lbmFibGVsaW1pdHF1YW50aXR5JykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5lbmFibGVsaW1pdHF1YW50aXR5JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH1cclxuICAgIGlmKCQoJyNjb3Vwb25fZW5hYmxlbGltaXRwZXJpb2QnKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH1cclxuICAgIGlmKCQoJyNjb3Vwb25fbm9ybWUnKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmdzMWNvZGUnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuJCgnLmFkZGNhbGVuZGFyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jYWxlbmRhcicpLmFwcGVuZCgnPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtY2FsZW5kYXJcIj48aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwic3RhcnRkYXRlW11cIj48aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwiZW5kZGF0ZVtdXCI+PGkgY2xhc3M9XCJmYXMgZmEtbWludXMtc3F1YXJlIHJlbW92ZWNhbGVuZGFyXCI+PC9pPjwvZGl2PicpO1xyXG59KTtcclxuXHJcbiQoJy5jYWxlbmRhcicpLm9uKCdjbGljaycsICcucmVtb3ZlY2FsZW5kYXInLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnLmZvcm0tZmllbGQtY2FsZW5kYXInKS5yZW1vdmUoKTtcclxufSlcclxuXHJcbiQoJy5hZGQtbW91dmVtZW50LWJ0bicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB2YXIgZWxlbWVudCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICB2YXIgbW91dmVtZW50RGF0ZSA9IGVsZW1lbnQuZmluZCgnI2FkZC1tb3V2ZW1lbnQtZGF0ZScpLnZhbCgpO1xyXG4gICAgdmFyIG1vdXZlbWVudE5icmUgPSBlbGVtZW50LmZpbmQoJyNhZGQtbW91dmVtZW50LW5icmUnKS52YWwoKTtcclxuICAgIHZhciBodG1sID0gXCI8dHI+XCI7XHJcbiAgICBodG1sICs9IFwiPHRoPlwiK21vdXZlbWVudERhdGUuc3BsaXQoJy0nKS5yZXZlcnNlKCkuam9pbignLycpK1wiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nbW91dmVtZW50RGF0ZVtdJyB2YWx1ZT0nXCIrbW91dmVtZW50RGF0ZStcIic+PC90aD5cIjtcclxuICAgIGh0bWwgKz0gXCI8dGg+XCIrbW91dmVtZW50TmJyZStcIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J21vdXZlbWVudE5icmVbXScgdmFsdWU9J1wiK21vdXZlbWVudE5icmUrXCInPjwvdGg+XCI7XHJcbiAgICBodG1sICs9IFwiPHRoPjwvdGg+PC90cj5cIjtcclxuICAgICQoJy5hZGQtbW91dmVtZW50JykuYmVmb3JlKGh0bWwpO1xyXG59KVxyXG5cclxuXHJcbiQoJy5jb250YWN0V2lkZ2V0cycpLm9uKCdjbGljaycsICcuY29weS11cmwnLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICB2YXIgYW5pbUVsZW1lbnQgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5saW5rLWNvcGllZCcpO1xyXG4gICAgdmFyICR0ZW1wRWxlbWVudCA9ICQoXCI8aW5wdXQ+XCIpO1xyXG4gICAgJChcImJvZHlcIikuYXBwZW5kKCR0ZW1wRWxlbWVudCk7XHJcbiAgICAkdGVtcEVsZW1lbnQudmFsKCQodGhpcykudGV4dCgpKS5zZWxlY3QoKTtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiQ29weVwiKTtcclxuICAgICR0ZW1wRWxlbWVudC5yZW1vdmUoKTtcclxuICAgIGFuaW1FbGVtZW50LmFuaW1hdGUoe29wYWNpdHk6IDF9LCAyMDAsIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBhbmltRWxlbWVudC5hbmltYXRlKHtvcGFjaXR5OiAwfSwgMTAwMCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG5cclxuLy8gLS0tLSBEQVNIQk9BUkQgQlVUVE9OU1xyXG5cclxuJCgnLmNhbXBEZXRhaWwgLmZhLWFuZ2xlLWRvd24nKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICB2YXIgY3BEaXYgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5jb3Vwb25zJyk7XHJcbiAgICBpZihjcERpdi5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpe1xyXG4gICAgICAgIGNwRGl2LnNsaWRlRG93big1MDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjcERpdi5zbGlkZVVwKDUwMCk7XHJcbiAgICB9XHJcbn0pXHJcblxyXG4kKCcub3Blbi1hbGwnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgJCgnLmNvdXBvbnMnKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgJCh0aGlzKS5zbGlkZURvd24oNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4kKCcuY2xvc2UtYWxsJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jb3Vwb25zJykuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICQodGhpcykuc2xpZGVVcCg1MDApO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC0tLS0gQUxFUlRFIHN1ciBDYW1wYWduZVxyXG5cclxuJCgnLmNvdXBvbkRldGFpbCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgIGlmKCQodGhpcykuYXR0cignZGF0YS1wcmludGFibGUnKSA9PSAwKXtcclxuICAgICAgICBjb25zb2xlLmxvZygpO1xyXG4gICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkuZmluZCgnLmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJykuc2hvdygpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuXHJcbiQoJ2JvZHknKS5vbignY2xpY2snLCAnLmV4cGFuZCcsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB2YXIgY29udGVudERpdiA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCkuZmluZCgnLmNvbnRlbnQnKVxyXG5cclxuICAgIGlmKGNvbnRlbnREaXYuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnKXtcclxuICAgICAgICBjb250ZW50RGl2LnNsaWRlRG93bigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb250ZW50RGl2LnNsaWRlVXAoKTtcclxuICAgIH1cclxufSlcclxuXHJcbiQoJy5vcGVuLWFsbC1zdGF0cycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKCcuY291cG9uU3RhdHMgLmNvbnRlbnQnKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgJCh0aGlzKS5zbGlkZURvd24oNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4kKCcuY2xvc2UtYWxsLXN0YXRzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jb3Vwb25TdGF0cyAuY29udGVudCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgICAgICAkKHRoaXMpLnNsaWRlVXAoNTAwKTtcclxuICAgIH0pXHJcbn0pXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2pzL2FwcC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n");
/***/ }),
/* 2 */
diff --git a/public/test.php b/public/test.php
deleted file mode 100644
index cf60860..0000000
--- a/public/test.php
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/resources/js/app.js b/resources/js/app.js
index 9f2aef0..fa3e437 100644
--- a/resources/js/app.js
+++ b/resources/js/app.js
@@ -296,9 +296,9 @@ $('.couponDetail').each(function(){
})
-$('body').on('click', '.couponStats h4', function(event){
+$('body').on('click', '.expand', function(event){
event.preventDefault();
- var contentDiv = $(this).parent().find('.content')
+ var contentDiv = $(this).parent().parent().find('.content')
if(contentDiv.css('display') == 'none'){
contentDiv.slideDown();
diff --git a/resources/sass/partials/content.scss b/resources/sass/partials/content.scss
index 4c7186f..ea9b373 100644
--- a/resources/sass/partials/content.scss
+++ b/resources/sass/partials/content.scss
@@ -658,7 +658,13 @@ table {
color:$lightgrey;
font-weight:bold;
background-color:$darkgrey;
- cursor:pointer;
+ span {
+ cursor:pointer;
+ &:first-child {
+ width: 95%;
+ display: block;
+ }
+ }
.couponLegend {
position:absolute;
display:inline-block;
@@ -667,6 +673,19 @@ table {
width:20px;
height:20px;
border-radius:50%;
+ overflow:hidden;
+ .line {
+ width: 35px;
+ height: 20px;
+ border-bottom: 3px solid red;
+ -webkit-transform:
+ translateY(-20px)
+ translateX(5px)
+ rotate(27deg);
+ position: absolute;
+ top: 9px;
+ left: -10px;
+ }
}
}
.content {
@@ -696,6 +715,31 @@ table {
width:55%;
h3 {
margin:30px 0 20px 0;
+ i {
+ float:right;
+ margin-left:10px;
+ cursor: pointer;
+ }
}
}
+}
+
+.selector-export {
+ display:flex;
+ justify-content:flex-end;
+ align-items:center;
+ h4 {
+ margin:0;
+ margin-right:20px;
+ }
+ input {
+ min-width: 150px;
+ startdate {
+ margin-right:20px;
+ }
+ }
+}
+.export-btn {
+ text-align:right;
+ margin-top:20px;
}
\ No newline at end of file
diff --git a/resources/sass/partials/fancy.scss b/resources/sass/partials/fancy.scss
index 57b4a41..ead5e8d 100644
--- a/resources/sass/partials/fancy.scss
+++ b/resources/sass/partials/fancy.scss
@@ -3,89 +3,7 @@
padding:20px;
min-width:550px;
- .inputGroup {
- background-color: $grey3;
- display: block;
- margin: 2px 0;
- position: relative;
- &.notPublished {
- background-color:rgba(223, 0, 0, 0.3);
- }
- label {
- padding: 8px 30px;
- width: 100%;
- display: block;
- text-align: left;
- color: $lightgrey;
- cursor: pointer;
- position: relative;
- z-index: 2;
- transition: color 200ms ease-in;
- overflow: hidden;
- box-sizing: border-box;
- font-family: 'Nunito-Regular', sans-serif;
- &:before {
- width: 10px;
- height: 10px;
- border-radius: 50%;
- content: '';
- background-color: $darkgrey;
- position: absolute;
- left: 50%;
- top: 50%;
- transform: translate(-50%, -50%) scale3d(1, 1, 1);
- transition: all 300ms cubic-bezier(0.4, 0.0, 0.2, 1);
- opacity: 0;
- z-index: -1;
- }
- &:after {
- width: 20px;
- height: 20px;
- content: '';
- border: 1px solid $orange;
- background-color: $grey3;
- background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.414 11L4 12.414l5.414 5.414L20.828 6.414 19.414 5l-10 10z' fill='%23393939' fill-rule='nonzero'/%3E%3C/svg%3E ");
- background-repeat: no-repeat;
- background-position: -3px -1px;
- //border-radius: 50%;
- z-index: 2;
- position: absolute;
- right: 30px;
- top: 50%;
- transform: translateY(-50%);
- cursor: pointer;
- transition: all 200ms ease-in;
- }
- }
-
- input:checked ~ label {
- color: #fff;
-
- &:before {
- transform: translate(-50%, -50%) scale3d(130, 130, 1);
- opacity: 1;
- }
-
- &:after {
- background-color: $orange;
- border-color: $orange;
- }
- }
-
- input {
- width: 32px;
- height: 32px;
- order: 1;
- z-index: 2;
- position: absolute;
- right: 30px;
- top: 50%;
- transform: translateY(-50%);
- cursor: pointer;
- visibility: hidden;
- }
- }
input[type=submit] {
padding:5px 10px;
background-color: $orange;
@@ -186,4 +104,88 @@
cursor:pointer;
margin-right:15px;
}
+}
+
+.inputGroup {
+ background-color: $grey3;
+ display: block;
+ margin: 2px 0;
+ position: relative;
+ &.notPublished {
+ background-color:rgba(223, 0, 0, 0.3);
+ }
+ label {
+ padding: 8px 30px;
+ width: 100%;
+ display: block;
+ text-align: left;
+ color: $lightgrey;
+ cursor: pointer;
+ position: relative;
+ z-index: 2;
+ transition: color 200ms ease-in;
+ overflow: hidden;
+ box-sizing: border-box;
+ font-family: 'Nunito-Regular', sans-serif;
+ &:before {
+ width: 10px;
+ height: 10px;
+ border-radius: 50%;
+ content: '';
+ background-color: $darkgrey;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%) scale3d(1, 1, 1);
+ transition: all 300ms cubic-bezier(0.4, 0.0, 0.2, 1);
+ opacity: 0;
+ z-index: -1;
+ }
+
+ &:after {
+ width: 20px;
+ height: 20px;
+ content: '';
+ border: 1px solid $orange;
+ background-color: $grey3;
+ background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.414 11L4 12.414l5.414 5.414L20.828 6.414 19.414 5l-10 10z' fill='%23393939' fill-rule='nonzero'/%3E%3C/svg%3E ");
+ background-repeat: no-repeat;
+ background-position: -3px -1px;
+ //border-radius: 50%;
+ z-index: 2;
+ position: absolute;
+ right: 30px;
+ top: 50%;
+ transform: translateY(-50%);
+ cursor: pointer;
+ transition: all 200ms ease-in;
+ }
+ }
+
+ input:checked ~ label {
+ color: #fff;
+
+ &:before {
+ transform: translate(-50%, -50%) scale3d(130, 130, 1);
+ opacity: 1;
+ }
+
+ &:after {
+ background-color: $orange;
+ border-color: $orange;
+ }
+ }
+
+ input {
+ width: 32px;
+ height: 32px;
+ order: 1;
+ z-index: 2;
+ position: absolute;
+ right: 30px;
+ top: 50%;
+ transform: translateY(-50%);
+ cursor: pointer;
+ visibility: hidden;
+ }
}
\ No newline at end of file
diff --git a/resources/sass/partials/reset.scss b/resources/sass/partials/reset.scss
index 02c4568..2aa5e8b 100644
--- a/resources/sass/partials/reset.scss
+++ b/resources/sass/partials/reset.scss
@@ -126,6 +126,14 @@ h5 {
}
}
+h5 {
+ font-family: 'Nunito-ExtraLight', sans-serif;
+ font-size:1em;
+ //font-weight:bold;
+ color:$orange;
+ margin: 20px 0 10px 0;
+}
+
p {
font-family: 'Nunito-ExtraLight', sans-serif;
color:$lightgrey;
diff --git a/resources/views/export/index.blade.php b/resources/views/export/index.blade.php
new file mode 100644
index 0000000..4e9e0d9
--- /dev/null
+++ b/resources/views/export/index.blade.php
@@ -0,0 +1,69 @@
+@extends('layouts.main')
+
+@section('content')
+ Export des données coupons
+
+@foreach ($sites as $site)
+
+ {{ $site->site_nom }} ({{ $site->site_id }})
+ @if (isset($site->coupons) && $site->coupons->count()>0)
+ @foreach ($site->coupons as $coupon)
+
+
+ {{$coupon->coupon_name}}
+
+ @endforeach
+ @endif
+
+@endforeach
+
+
+@endsection
+
+@section('scripts')
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/export/template.blade.php b/resources/views/export/template.blade.php
new file mode 100644
index 0000000..86ba669
--- /dev/null
+++ b/resources/views/export/template.blade.php
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
MesBR.eu
+
{{ $coupon->coupon_name }}
+
Diffusions du {{ date('d/m/Y', strtotime($startdate)) }} au {{ date('d/m/Y', strtotime($enddate)) }}
+
+
Détail du coupon
+
+
+ Nom
+ Code
+ Quantité totale
+ Qté totale diffusée
+ Date de début de diffusion
+ Date de fin de diffusion
+
+
+ {{ $coupon->coupon_name }}
+ {{ $coupon->coupon_code }}
+ {{ $coupon->couponQuantity }}
+ {{ $coupon->couponFullPrinted }}
+ @if($coupon->coupon_maxdatediffusion != null)
+ {{ date('d/m/Y', strtotime($coupon->coupon_mindatediffusion)) }}
+ @else
+ n/c
+ @endif
+ @if($coupon->coupon_maxdatediffusion != null)
+ {{ date('d/m/Y', strtotime($coupon->coupon_maxdatediffusion)) }}
+ @else
+ n/c
+ @endif
+
+
+
Graphique de diffusion sur la période du {{ date('d/m/Y', strtotime($startdate)) }} au {{ date('d/m/Y', strtotime($enddate)) }}
+
Nombre de coupons diffusés : {{ $coupon->couponPrinted }}
+
+
+
+
diff --git a/resources/views/layouts/menu.blade.php b/resources/views/layouts/menu.blade.php
index 9773bc2..ebe0389 100644
--- a/resources/views/layouts/menu.blade.php
+++ b/resources/views/layouts/menu.blade.php
@@ -10,6 +10,7 @@
@endif
@if(Auth::user()->roles == "superadmin")
Maintenance
+
@endif
diff --git a/resources/views/stats/detail.blade.php b/resources/views/stats/detail.blade.php
index 93c2c12..c083a99 100644
--- a/resources/views/stats/detail.blade.php
+++ b/resources/views/stats/detail.blade.php
@@ -74,7 +74,7 @@
@foreach ($campagne->coupons as $coupon)
-
{{ $coupon->coupon_name }}
+
{{ $coupon->coupon_name }}
@@ -111,7 +111,7 @@
@endforeach
-
Consommation par coupons
+ Consommation par coupons
@@ -120,6 +120,7 @@
@section('scripts')