$path = 'index.html';
}
- $cpath = $forceGuest || auth()->guest() ? 'fluidbooks/catalogue_invite' : 'fluidbooks/catalogue';
+ $cpath = $forceGuest || auth()->guard('client')->guest() ? 'fluidbooks/catalogue_invite' : 'fluidbooks/catalogue';
$relayPath = base_path($cpath) . '/' . $path;
- return XSendFileController::sendfile($relayPath);
+ return XSendFileController::sendfileNoCache($relayPath);
}
public function guest($path = '')
protected function auth()
{
- return response((!Auth::guard('client')->guest()) ? '1' : '0')->header('Content-Type', 'text/plain');
+ return response()->json(['data' => [['logged-in' => !Auth::guard('client')->guest()]]]);
}
protected function login()
$request->session()->regenerate();
return response()->json(['success' => 'ok'])->setStatusCode(200);
} else {
- return response()->json(['success' => 'failed'])->setStatusCode(4031);
+ return response()->json(['success' => 'failed'])->setStatusCode(401);
}
}
//
}
+
+ public static function loadData()
+ {
+ return json_decode(trim(file_get_contents(base_path('fluidbooks/catalogue/data/datas.js'), false, null, 13), "\ \n\r\t\v\0;"), true)['basketReferences'];
+ }
+
protected function order()
{
- $details = '';
+ $data = self::loadData();
+
+ $details = [];
+ $quantity = 0;
+ $total = 0;
+ $cumul_tva = 0;
+ $cumul_ecotaxe = 0;
foreach (request('details') as $i) {
+ $p = $data[$i['reference']];
+ $quantity += $i['quantity'];
+ $ht = self::parseFloat($p['PV RESAH HT']);
+ $ecotaxe = self::parseFloat($p['ECOTAXE']);
+ $tht = ($ht + $ecotaxe) * $i['quantity'];
+ $tva = $ht * $i['quantity'] * 0.01 * self::parseFloat('TVA');
+ $total += $ht;
+
+ $cumul_tva += $tva;
+ $cumul_ecotaxe += $ecotaxe;
+
+ $d = [];
+ foreach ($p as $k => $v) {
+ if (!$k || !$v) {
+ continue;
+ }
+ $d[] = $k . " : " . $v;
+ }
+ $d[] = '--';
+ $d[] = 'QUANTITE : ' . $i['quantity'];
+ $d[] = 'TOTAL HT : ' . self::formatNumber($tht);
+ $details[] = implode("\n", $d);
}
+ $details[] = 'TOTAL HT : ' . self::formatNumber($total) . "\n"
+ . 'TVA : ' . self::formatNumber($cumul_tva) . "\n"
+ . 'ECOTAXE : ' . self::formatNumber($cumul_ecotaxe) . "\n"
+ . 'TOTAL TTC : ' . self::formatNumber($total + $cumul_ecotaxe + $cumul_tva);
+
$order = new Order();
- $order->client = auth()->guard('client')->user();
- $order->details = $details;
+ $order->client = auth()->guard('client')->user()->id;
+ $order->details = implode("\n\n----\n\n", $details);
+ $order->quantity = $quantity;
+ $order->total_ht = $total;
$order->save();
}
+
+ protected static function formatNumber($n, $suffix = ' €')
+ {
+ return number_format($n, 2, '.', '') . $suffix;
+ }
+
+ protected static function parseFloat($f)
+ {
+ $f = str_replace(' ', '', $f);
+ $f = str_replace('€', '', $f);
+ $f = str_replace('%', '', $f);
+ $f = str_replace(',', '', $f);
+ return (float)$f;
+ }
}
if (str_ends_with($path, '.html')) {
$html = file_get_contents($relayPath);
$html = str_replace('</head>', '<meta name="csrf-token" content="' . csrf_token() . '"/></head>', $html);
+ $user = Auth::guard('client')->user();
+ if ($user) {
+ $html = str_replace('Prénom Nom', $user->firstname . ' ' . $user->name, $html);
+ }
return response($html)->header('Content-Type', 'text/html');
}
'singular' => 'client',
'plural' => 'clients'];
+ protected $_enableClone = false;
+ protected $_enableBulk = false;
+
public function setFields()
{
parent::setFields();
$this->getField('enabled')->setAttribute('label', 'Activé');
$this->getField('password')->setAttribute('can', null);
$this->addField('finess', Text::class, 'Numéro FINESS', ['tab' => 'Login']);
- $this->addField('hospital', Text::class, 'Nom de l\'établissement', ['tab' => 'Login']);
- $this->addField('firstname', Text::class, 'Prénom', ['tab' => 'Login']);
- $this->addField('name', Text::class, 'Nom', ['tab' => 'Login']);
+ $this->addField('hospital', Text::class, 'Nom de l\'établissement', ['tab' => 'Login', 'column' => true]);
+ $this->addField('firstname', Text::class, 'Prénom', ['tab' => 'Login', 'column' => true]);
+ $this->addField('name', Text::class, 'Nom', ['tab' => 'Login', 'column' => true]);
$this->addField('function', Text::class, 'Fonction', ['tab' => 'Login']);
$this->addField('phone', Text::class, 'Numéro de téléphone', ['tab' => 'Login']);
}
namespace App\Models;
+use Cubist\Backpack\Magic\Fields\Date;
+use Cubist\Backpack\Magic\Fields\Integer;
+use Cubist\Backpack\Magic\Fields\Number;
+use Cubist\Backpack\Magic\Fields\SelectFromModel;
+use Cubist\Backpack\Magic\Fields\Textarea;
use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
class Order extends CubistMagicAbstractModel
protected $_options = ['name' => 'order',
'singular' => 'commande',
'plural' => 'commandes'];
+
+ protected $_enableClone = false;
+ protected $_enableBulk = false;
+ protected $_enableCreation = false;
+
+ public function setFields()
+ {
+ parent::setFields();
+
+
+ $this->addField('client', SelectFromModel::class, 'Client', ['optionsmodel' => Client::class, "column" => true, 'column_attribute' => 'hospital']);
+ $this->addField('details', Textarea::class, 'Détails');
+ $this->addField('quantity', Integer::class, 'Nombre de produits', ['column' => true]);
+ $this->addField('total_ht', Number::class, 'Total HT', ['column' => true]);
+ $this->addField('created_at', Date::class, 'Date', ['column' => true]);
+ }
}
<!DOCTYPE html><!-- This site was created in Webflow. https://www.webflow.com -->
-<!-- Last Published: Fri Apr 19 2024 08:21:02 GMT+0000 (Coordinated Universal Time) -->
+<!-- Last Published: Tue Apr 23 2024 05:25:27 GMT+0000 (Coordinated Universal Time) -->
<html data-wf-page="6620dda3b5f5da5125581eb0" data-wf-site="661004d856d8b276759afc40">
<head>
<meta charset="utf-8">
flex-flow: row;
justify-content: space-between;
align-items: stretch;
- width: 80%;
- max-width: 1536px;
+ width: 100%;
+ max-width: 1680px;
height: 100%;
margin-left: auto;
margin-right: auto;
- padding-top: 1rem;
- padding-bottom: 1rem;
+ padding: 1rem 4rem;
display: flex;
}
.paragraph-2 {
color: var(--white);
+ margin-bottom: 0;
}
.logo-footer {
max-height: 1.5rem;
}
-.login-open-contain {
+.login-link-contain {
grid-column-gap: 2rem;
grid-row-gap: 2rem;
height: 3rem;
position: relative;
}
-.link-sign {
+.login-link {
color: var(--main-blue);
text-transform: uppercase;
margin-top: -1rem;
border-radius: 5px;
}
+.login-logged-contain {
+ z-index: 10;
+ grid-column-gap: .5rem;
+ grid-row-gap: .5rem;
+ flex-flow: column;
+ justify-content: flex-start;
+ align-items: flex-start;
+ width: 100%;
+ display: flex;
+ position: relative;
+}
+
+.image-4 {
+ width: 2rem;
+}
+
+.link-log-out {
+ color: var(--action-blue);
+ align-self: auto;
+ margin-left: 0;
+ margin-right: auto;
+ font-size: .9rem;
+ font-weight: 400;
+ position: relative;
+}
+
+.link-log-out:hover {
+ color: var(--action-hover);
+}
+
+.div-block-18 {
+ grid-column-gap: .5rem;
+ grid-row-gap: .5rem;
+ margin-bottom: .5rem;
+ display: flex;
+}
+
+.login-wrap-logged {
+ background-color: var(--main-blue);
+ justify-content: center;
+ align-items: flex-start;
+ height: auto;
+ padding-top: 4rem;
+ padding-bottom: 4rem;
+ padding-left: 4rem;
+ display: flex;
+ position: relative;
+ top: 0;
+}
+
@media screen and (max-width: 991px) {
.main {
flex-flow: column;
align-items: flex-start;
}
- .login-open-contain {
+ .login-link-contain {
justify-content: flex-end;
align-items: center;
height: 4rem;
right: 4rem;
}
- .link-sign {
+ .login-link {
margin-top: 0;
position: relative;
}
.section-footer.fixed {
position: relative;
}
+
+ .login-wrap-logged {
+ margin-left: -4rem;
+ margin-right: -4rem;
+ padding-top: 4rem;
+ padding-right: 4rem;
+ display: block;
+ }
}
@media screen and (max-width: 767px) {
text-align: center;
}
- .login-open-contain {
+ .login-link-contain {
grid-column-gap: 1rem;
grid-row-gap: 1rem;
flex-flow: row;
right: 0%;
}
- .link-sign {
+ .login-link {
text-align: right;
}
.sub, .sub-bold {
margin-left: 0;
}
+
+ .login-wrap-logged {
+ margin-left: -2rem;
+ margin-right: -2rem;
+ padding: 2rem;
+ }
}
#w-node-d100f643-e903-8c7d-af5b-f27e805256d0-759afc4f {
grid-area: span 1 / span 6 / span 1 / span 6;
}
+#w-node-d100f643-e903-8c7d-af5b-f27e805256d0-674dc4db {
+ grid-area: span 1 / span 8 / span 1 / span 8;
+}
+
+#w-node-_6f9956a3-e864-4d2e-ed2a-708f54eeb981-674dc4db {
+ grid-area: span 1 / span 5 / span 1 / span 5;
+}
+
+#w-node-ecfbbec6-5d25-d8fb-0bfb-0e3780f4e730-674dc4db, #w-node-_2b36ab23-5dc7-0407-ff12-015028c2eea5-674dc4db {
+ grid-area: span 1 / span 6 / span 1 / span 6;
+}
+
+#w-node-_32abe63d-96a1-8dcd-52e7-97d8c2ec03e0-674dc4db, #login.w-node-_12259778-be95-d71b-a8f2-39430d62a8fc-674dc4db {
+ grid-area: span 1 / span 4 / span 1 / span 4;
+}
+
@media screen and (max-width: 991px) {
- #w-node-d100f643-e903-8c7d-af5b-f27e805256d0-759afc4f, #w-node-d100f643-e903-8c7d-af5b-f27e805256d0-9bb8274d, #w-node-d100f643-e903-8c7d-af5b-f27e805256d0-25581eb0 {
+ #w-node-d100f643-e903-8c7d-af5b-f27e805256d0-759afc4f, #w-node-d100f643-e903-8c7d-af5b-f27e805256d0-9bb8274d, #w-node-d100f643-e903-8c7d-af5b-f27e805256d0-25581eb0, #w-node-d100f643-e903-8c7d-af5b-f27e805256d0-674dc4db {
grid-column: span 12 / span 12;
}
}
-<a href="/catalogue/">Voir le catalogue</a>
-<a href="/landing/logout">Logout</a>
+<!DOCTYPE html><!-- This site was created in Webflow. https://www.webflow.com -->
+<!-- Last Published: Tue Apr 23 2024 05:25:27 GMT+0000 (Coordinated Universal Time) -->
+<html data-wf-page="6622765b38afe101674dc4db" data-wf-site="661004d856d8b276759afc40">
+<head>
+ <meta charset="utf-8">
+ <title>Home-logged</title>
+ <meta content="Home-logged" property="og:title">
+ <meta content="Home-logged" property="twitter:title">
+ <meta content="width=device-width, initial-scale=1" name="viewport">
+ <meta content="Webflow" name="generator">
+ <link href="css/normalize.css" rel="stylesheet" type="text/css">
+ <link href="css/webflow.css" rel="stylesheet" type="text/css">
+ <link href="css/bastide-maquette.webflow.css" rel="stylesheet" type="text/css">
+ <link href="https://fonts.googleapis.com" rel="preconnect">
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous">
+ <script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script>
+ <script type="text/javascript">WebFont.load({ google: { families: ["Roboto Condensed:100,200,300,regular,500,600,700,800,900"] }});</script>
+ <script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
+ <link href="images/favicon.ico" rel="shortcut icon" type="image/x-icon">
+ <link href="images/webclip.png" rel="apple-touch-icon">
+ <link rel="stylesheet" href="css/custom.css">
+</head>
+<body>
+ <div class="bg-login"></div>
+ <section class="main">
+ <div id="w-node-b9db0dc0-8a8b-917b-ce16-81efc12c6caf-674dc4db" class="graphics-contain"><img src="images/carres.svg" loading="lazy" alt="" class="graphics"></div>
+ <div id="w-node-d100f643-e903-8c7d-af5b-f27e805256d0-674dc4db" class="content-wrap">
+ <a href="index.html" class="logo-contain w-inline-block"><img src="images/logo-bastide.svg" loading="lazy" alt="Bastide" class="image-3"></a>
+ <div class="content-contain home">
+ <div class="div-block-8">
+ <div id="w-node-_6f9956a3-e864-4d2e-ed2a-708f54eeb981-674dc4db" class="div-block-6">
+ <h1 id="w-node-ecfbbec6-5d25-d8fb-0bfb-0e3780f4e730-674dc4db" class="heading-1">Bienvenue sur <span class="span-no-break">Bastide-resah.com</span></h1>
+ <h2 id="w-node-_2b36ab23-5dc7-0407-ff12-015028c2eea5-674dc4db" class="heading-2">Avec notre catalogue interactif, sélectionnez vos produits, déterminez votre budget en instantané, et recevez un devis par le Resah dans les 72h.</h2>
+ <div class="div-block-17"><img src="images/compo-pages.png" loading="lazy" id="w-node-_32abe63d-96a1-8dcd-52e7-97d8c2ec03e0-674dc4db" alt="" class="image"></div>
+ <a href="/catalogue" class="button w-button">Consulter le catalogue</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="login" class="login-wrap-logged w-node-_12259778-be95-d71b-a8f2-39430d62a8fc-674dc4db">
+ <div class="login-logged-contain"><img src="images/icon-user.svg" loading="lazy" alt="" class="image-4">
+ <div class="field-label">compte utilisateur</div>
+ <div class="div-block-18">
+ <p id="logged-in-name" class="paragraph-2">Prénom Nom</p>
+ </div>
+ <a href="/landing/logout" class="link-log-out">Se déconnecter</a>
+ </div>
+ </div>
+ <div id="w-node-_04705bd0-5959-ba3d-44af-fbe28ee91ec7-674dc4db" class="login-link-contain">
+ <a href="#login" class="login-link">Se déconnecter</a>
+ </div>
+ </section>
+ <section class="section-footer fixed">
+ <div class="footer-wrap">
+ <div class="footer-contain">
+ <div class="footer-logos-contain">
+ <a href="#" class="w-inline-block"><img src="images/logo-bastide.svg" loading="lazy" alt="Bastide logo" class="logo-footer"></a>
+ <a href="#" class="link-block w-inline-block"><img src="images/resah-logo-footer-blue.svg" loading="lazy" alt="resah logo" class="logo-footer resah"></a>
+ </div>
+ <div class="footer-links-contain">
+ <a href="mentions-legales.html" class="footer-link">Mentions légales</a>
+ <a href="charte-de-protection-des-donnees-personnelles.html" class="footer-link">Charte de protection des données personnelles</a>
+ </div>
+ </div>
+ </div>
+ </section>
+ <script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=661004d856d8b276759afc40" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
+ <script src="js/webflow.js" type="text/javascript"></script>
+ <script src="js/custom.js"></script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="57.4" height="57.4" viewBox="0 0 57.4 57.4">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_53" data-name="Rectangle 53" width="57.4" height="57.4" transform="translate(0 0)" fill="none" stroke="#fff" stroke-width="1"/>
+ </clipPath>
+ </defs>
+ <g id="Groupe_36" data-name="Groupe 36" transform="translate(-7396 -1577)">
+ <g id="Groupe_35" data-name="Groupe 35" transform="translate(7396 1577)">
+ <g id="Groupe_34" data-name="Groupe 34" clip-path="url(#clip-path)">
+ <path id="Tracé_26" data-name="Tracé 26" d="M47.774,47.273a26.61,26.61,0,0,0-38.149,0" fill="none" stroke="#fff" stroke-miterlimit="10" stroke-width="4"/>
+ <circle id="Ellipse_1" data-name="Ellipse 1" cx="9.175" cy="9.175" r="9.175" transform="translate(19.525 12.096)" fill="none" stroke="#fff" stroke-miterlimit="10" stroke-width="4"/>
+ <circle id="Ellipse_2" data-name="Ellipse 2" cx="26.629" cy="26.629" r="26.629" transform="translate(2.071 2.071)" fill="none" stroke="#fff" stroke-miterlimit="10" stroke-width="4.141"/>
+ </g>
+ </g>
+ </g>
+</svg>
<!DOCTYPE html><!-- This site was created in Webflow. https://www.webflow.com -->
-<!-- Last Published: Fri Apr 19 2024 08:21:02 GMT+0000 (Coordinated Universal Time) -->
+<!-- Last Published: Tue Apr 23 2024 05:25:27 GMT+0000 (Coordinated Universal Time) -->
<html data-wf-page="661004d856d8b276759afc4f" data-wf-site="661004d856d8b276759afc40">
<head>
<meta charset="utf-8">
<div class="div-block-8">
<div id="w-node-_6f9956a3-e864-4d2e-ed2a-708f54eeb981-759afc4f" class="div-block-6">
<h1 id="w-node-ecfbbec6-5d25-d8fb-0bfb-0e3780f4e730-759afc4f" class="heading-1">Bienvenue sur <span class="span-no-break">Bastide-resah.com</span></h1>
- <h2 id="w-node-_2b36ab23-5dc7-0407-ff12-015028c2eea5-759afc4f" class="heading-2">Consultez notre catalogue, sélectionnez vos produits, déterminez votre budget en instantané, et recevez un devis par le Resah dans les 72h.</h2>
- <div class="div-block-17"><img src="images/compo-pages.png" loading="lazy" id="w-node-_32abe63d-96a1-8dcd-52e7-97d8c2ec03e0-759afc4f" alt="Catalogue Bastide Resah" class="image"></div>
+ <h2 id="w-node-_2b36ab23-5dc7-0407-ff12-015028c2eea5-759afc4f" class="heading-2">Avec notre catalogue interactif, sélectionnez vos produits, déterminez votre budget en instantané, et recevez un devis par le Resah dans les 72h.</h2>
+ <div class="div-block-17"><img src="images/compo-pages.png" loading="lazy" id="w-node-_32abe63d-96a1-8dcd-52e7-97d8c2ec03e0-759afc4f" alt="" class="image"></div>
<a href="/catalogue" class="button w-button">Consulter le catalogue</a>
</div>
</div>
</div>
<div id="login" class="login-wrap w-node-_12259778-be95-d71b-a8f2-39430d62a8fc-759afc4f">
<div class="login-contain">
- <p class="paragraph-2">Pour afficher les tarifs, ajouter des produits à votre sélection, et nous envoyer une demande de devis, veuillez vous identifier :</p>
+ <p class="paragraph-2">Pour consulter le catalogue avec toutes ses fonctionnalités (affichage des prix, sélection de produits, demande de devis), veuillez vous identifier :</p>
<div class="form-block w-form">
<form id="wf-form-login" name="wf-form-Mot-de-passe" data-name="Mot de passe" redirect="/" data-redirect="/" action="/landing/login" method="post" class="form" data-wf-page-id="661004d856d8b276759afc4f" data-wf-element-id="99ae6f83-e84a-81db-916c-513b0ba9ed1a"><label for="email" class="field-label">Adresse Email</label><input class="text-field w-input" autofocus="true" maxlength="256" name="email" data-name="email" placeholder="" type="email" id="email" required=""><label for="password" class="field-label">Mot de passe</label><input class="text-field w-input" maxlength="256" name="password" data-name="password" placeholder="" type="password" id="password" required=""><input type="submit" data-wait="Please wait..." class="submit-button w-button" value="S'IDENTIFIER"></form>
<div class="w-form-done">
</div>
</div>
</div>
- <div id="w-node-_04705bd0-5959-ba3d-44af-fbe28ee91ec7-759afc4f" class="login-open-contain">
- <a href="#login" class="link-sign">connnexion</a>
+ <div id="w-node-_04705bd0-5959-ba3d-44af-fbe28ee91ec7-759afc4f" class="login-link-contain">
+ <a href="#login" class="login-link">connexion</a>
</div>
</section>
<section class="section-footer fixed">
<!DOCTYPE html><!-- This site was created in Webflow. https://www.webflow.com -->
-<!-- Last Published: Fri Apr 19 2024 08:21:02 GMT+0000 (Coordinated Universal Time) -->
+<!-- Last Published: Tue Apr 23 2024 05:25:27 GMT+0000 (Coordinated Universal Time) -->
<html data-wf-page="6620d6998fd60c549bb8274d" data-wf-site="661004d856d8b276759afc40">
<head>
<meta charset="utf-8">
Route::match(['post'], '/fluidbook/login', \App\Http\Controllers\FluidbookController::class . '@login')->withoutMiddleware([VerifyCsrfToken::class]);
Route::match(['post'], '/fluidbook/forgotpassword', \App\Http\Controllers\FluidbookController::class . '@forgotPassword')->withoutMiddleware([VerifyCsrfToken::class]);
Route::match(['get'], '/fluidbook/auth', \App\Http\Controllers\FluidbookController::class . '@auth');
-Route::match(['post'], '/fluidbook/order', \App\Http\Controllers\FluidbookController::class . '@post')->withoutMiddleware([VerifyCsrfToken::class]);
+Route::match(['post'], '/fluidbook/order', \App\Http\Controllers\FluidbookController::class . '@order')->withoutMiddleware([VerifyCsrfToken::class]);
Route::match(['post'], '/landing/signin', \App\Http\Controllers\LandingController::class . '@signin');
Route::match(['post'], '/landing/login', \App\Http\Controllers\LandingController::class . '@login');