Initial commit
96
static/batch/sql_combine.bat
Normal file
@@ -0,0 +1,96 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
:: set "test=C:\C:\ \"
|
||||
set dir_parent=C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\static\sql
|
||||
set "f_list=file_list.txt"
|
||||
set dir_current=%cd%
|
||||
set "f_tmp=temp.txt"
|
||||
set "f_combine=000_combine.sql"
|
||||
set verbose=0
|
||||
set "strs_delete_0=920_edit_permissions.sql"
|
||||
set "strs_delete_1=910_anal.sql"
|
||||
set "strs_delete_2=deprecated"
|
||||
set "strs_delete_3=%f_list%"
|
||||
set "strs_delete_4=%f_tmp%"
|
||||
set "strs_delete_5=701_p_shop_get_many_role_permission.sql"
|
||||
set "strs_delete_6=600_p_shop_save_product.sql"
|
||||
set "strs_delete_7=170_ish_tbl_ERP_Order.sql"
|
||||
set strs_n_max=7
|
||||
set strs_list =%strs_delete_0% %strs_delete_1% %strs_delete_2% %strs_delete_3% %strs_delete_4%
|
||||
set "str_true=true"
|
||||
set "str_replace="
|
||||
|
||||
set "str_list="
|
||||
|
||||
|
||||
:: report constants
|
||||
echo temp = %f_tmp%
|
||||
echo dir_parent = !%dir_parent%!
|
||||
echo dir_current = !%dir_current%!
|
||||
echo file_list = %f_list%
|
||||
echo file = %f_combine%
|
||||
echo n strings = !strs_n_max!
|
||||
|
||||
:: begin
|
||||
cd %dir_parent%
|
||||
::echo current directory: %cd%
|
||||
del %f_tmp%
|
||||
del %f_list%
|
||||
del %f_combine%
|
||||
|
||||
:: colate dir files
|
||||
dir /b > %f_list%
|
||||
|
||||
::type %f_list%
|
||||
|
||||
echo loopy
|
||||
:: Remove blacklist files
|
||||
:: grep -v '920_edit_permissions.sql' %f_list% > %f_list%
|
||||
:: grep -v '910_anal.sql' %f_list% > %f_list%
|
||||
|
||||
|
||||
(for /f "delims=" %%a in (%f_list%) do (
|
||||
::if %verbose% gtr 0 ( echo new line )
|
||||
set "line=%%a"
|
||||
::if %verbose% gtr 0 ( echo new line = !line! )
|
||||
::if !line! neq %strs_delete_0% if !line! neq %strs_delete_1% if !line! neq %strs_delete_2% if !line! neq %strs_delete_3% if !line! neq %strs_delete_4% if !line! neq %strs_delete_5% if !line! neq %strs_delete_6% (
|
||||
:: echo !line!
|
||||
:: set "str_list=!str_list! !line!"
|
||||
::)
|
||||
set include_line=1
|
||||
for /L %%i in (0, 1, %strs_n_max%) do (
|
||||
::set "str_delete=!strs_delete_%%i!"
|
||||
if !line! equ !strs_delete_%%i! (
|
||||
set include_line=0
|
||||
)
|
||||
::set "include_line=!include_line!"
|
||||
set "line=!line!"
|
||||
)
|
||||
if !include_line! gtr 0 (
|
||||
echo !line!
|
||||
set "str_list=!str_list! !line!"
|
||||
)
|
||||
set "line=!line!"
|
||||
)) > %f_tmp%
|
||||
|
||||
:: Combine files
|
||||
echo output list:
|
||||
type %f_tmp%
|
||||
|
||||
del %f_list%
|
||||
echo file_tmp: %f_tmp%
|
||||
echo file_list: %f_list%
|
||||
echo combining files
|
||||
::type %f_tmp% | type > %f_list%
|
||||
::
|
||||
::type %f_list%
|
||||
echo cmd:
|
||||
echo "type !str_list! > %f_combine%"
|
||||
type !str_list! > %f_combine%
|
||||
|
||||
cd %dir_current%
|
||||
|
||||
echo Current Time: %TIME%
|
||||
|
||||
endlocal
|
||||
15
static/css/contact.css
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
.content > a {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.content > a > img, .content > a > h4 {
|
||||
flex: content;
|
||||
margin: 0px;
|
||||
}
|
||||
*/
|
||||
|
||||
14
static/css/home.css
Normal file
@@ -0,0 +1,14 @@
|
||||
.img-demo {
|
||||
max-width: 50%;
|
||||
min-width: 500px;
|
||||
}
|
||||
|
||||
.img-featured {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
img {
|
||||
background-image: url("/static/images/Tag_Molly1.png");
|
||||
}
|
||||
*/
|
||||
302
static/css/shared.css
Normal file
@@ -0,0 +1,302 @@
|
||||
:root {
|
||||
/* Declare global variables */
|
||||
--c_purple: #5B29FF;
|
||||
--c_purple_pastel: #D1D1FF;
|
||||
--c_purple_light: #C6BDFF;
|
||||
--c_purple_dark: #4700B3;
|
||||
--c_blue: #0044FF;
|
||||
--c_blue_pastel: #B8E0FF;
|
||||
--c_blue_light: #73E8FF;
|
||||
--c_blue_dark: #003ADB;
|
||||
}
|
||||
|
||||
*{
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: Arial;
|
||||
padding: 10px;
|
||||
background: var(--c_purple_pastel);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 4vh;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 2.4vh;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 2vh;
|
||||
margin: 1vh;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1.5vh;
|
||||
margin: 1vh;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25vh;
|
||||
margin: 1vh;
|
||||
}
|
||||
|
||||
/* Header/Blog Title */
|
||||
.header {
|
||||
padding: 1vh;
|
||||
text-align: center;
|
||||
background-color: var(--c_purple_light);
|
||||
}
|
||||
|
||||
/* Style the top navigation bar */
|
||||
.topnav {
|
||||
overflow: hidden;
|
||||
background-color: var(--c_purple);
|
||||
border-bottom-left-radius: 2.5vh;
|
||||
border-bottom-right-radius: 2.5vh;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
/* Style the topnav links */
|
||||
.topnav a, .topnav label {
|
||||
float: left;
|
||||
display: block;
|
||||
color: white;
|
||||
text-align: center;
|
||||
/* padding: 14px 16px; */
|
||||
text-decoration: none;
|
||||
}
|
||||
.topnav a {
|
||||
padding: 3vh 2vw;
|
||||
}
|
||||
/* Change color on hover */
|
||||
.topnav a:hover {
|
||||
background-color: var(--c_purple_light);
|
||||
color: var(--c_purple_dark);
|
||||
}
|
||||
|
||||
.topnav .container {
|
||||
max-width: 20%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* Create two unequal columns that floats next to each other */
|
||||
/* Left column */
|
||||
.leftcolumn {
|
||||
float: left;
|
||||
width: 70%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
/* min-width: fit-content; */
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* Right column */
|
||||
.rightcolumn {
|
||||
float: left;
|
||||
width: 30%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
/* min-width: fit-content; only on store?? */
|
||||
/* background-color: #f1f1f1; */
|
||||
padding-left: 20px;
|
||||
height: fit-content;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* Fake image */
|
||||
.fakeimg {
|
||||
background-color: var(--c_purple_light);
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
img, video {
|
||||
border-radius: 3vh;
|
||||
}
|
||||
|
||||
/* header image */
|
||||
img.header-logo {
|
||||
max-height: 15vh;
|
||||
}
|
||||
|
||||
/* icon images */
|
||||
.img-icon {
|
||||
max-width: 5vh;
|
||||
max-height: 5vh;
|
||||
border-radius: 1vh;
|
||||
}
|
||||
|
||||
.container-icon-label {
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.container-icon-label > * {
|
||||
display: inline-flex;
|
||||
margin-left: 1vh;
|
||||
margin-right: 1vh;
|
||||
}
|
||||
|
||||
.header > .container:first-of-type {
|
||||
max-width: 25%;
|
||||
justify-self: left;
|
||||
}
|
||||
.header > .container:last-of-type {
|
||||
max-width: 75%;
|
||||
justify-self: left;
|
||||
}
|
||||
|
||||
/* Add a card effect for articles */
|
||||
.card {
|
||||
background-color: white;
|
||||
padding: 1vh;
|
||||
margin-top: 3vh;
|
||||
display: flex !important;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
border-radius: 4vh;
|
||||
min-width: fit-content;
|
||||
}
|
||||
|
||||
.card.subcard {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.header.card {
|
||||
border-radius: 2.5vh;
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.container {
|
||||
flex: 1;
|
||||
margin: 0px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
max-width: 100%;
|
||||
min-width: fit-content;
|
||||
}
|
||||
|
||||
.column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
min-width: fit-content;
|
||||
}
|
||||
|
||||
.container > .card:first-of-type {
|
||||
margin-top: none;
|
||||
}
|
||||
|
||||
/* Clear floats after the columns
|
||||
.row:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
*/
|
||||
/* Footer */
|
||||
.footer {
|
||||
padding: 1vh;
|
||||
text-align: center;
|
||||
background: var(--c_purple_light);
|
||||
margin-top: 20px;
|
||||
border-radius: 2.5vh;
|
||||
}
|
||||
|
||||
.footer > h4, h5 {
|
||||
padding: 0;
|
||||
margin: 1vh;
|
||||
}
|
||||
|
||||
/* Responsive layout - when the screen is less than 800px wide, make the two columns stack on top of each other instead of next to each other */
|
||||
@media screen and (max-width: 800px) {
|
||||
.leftcolumn, .rightcolumn {
|
||||
width: 100%;
|
||||
/* padding: 0; */
|
||||
}
|
||||
}
|
||||
|
||||
/* Responsive layout - when the screen is less than 400px wide, make the navigation links stack on top of each other instead of next to each other */
|
||||
@media screen and (max-width: 400px) {
|
||||
.topnav a {
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/* input container
|
||||
margin-top: 3vh;
|
||||
*/
|
||||
.container-input {
|
||||
padding: 1vh;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.container-input > label {
|
||||
width: 100%;
|
||||
margin-bottom: 1vh;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.container-input:not(:nth-child(3)) > label {
|
||||
margin-top: 1vh;
|
||||
}
|
||||
|
||||
.container-input > input, .container-input > textarea {
|
||||
border: 2px solid var(--c_purple);
|
||||
max-width: 50%;
|
||||
min-width: 40%;
|
||||
padding: 1vh;
|
||||
}
|
||||
|
||||
.label-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
button, .btn-submit, input[type="submit"] {
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
border: 4px solid;
|
||||
border-radius: 2vh;
|
||||
padding: 1vh 2vh 1vh 2vh;
|
||||
margin: 0.5vh;
|
||||
background-color: var(--c_blue_pastel);
|
||||
color: var(--c_blue_dark);
|
||||
border-color: var(--c_blue_dark);
|
||||
}
|
||||
|
||||
/* Overlay modal */
|
||||
.overlay {
|
||||
display: none;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 999;
|
||||
}
|
||||
0
static/css/store_home.css
Normal file
0
static/css/store_product.css
Normal file
55
static/css/store_shared.css
Normal file
@@ -0,0 +1,55 @@
|
||||
.img-product {
|
||||
max-width: 20vh;
|
||||
max-height: 20vh;
|
||||
border-radius: 3vh;
|
||||
justify-self: left;
|
||||
}
|
||||
|
||||
.img-thumbnail {
|
||||
max-width: 10vh;
|
||||
max-height: 10vh;
|
||||
border-radius: 3vh;
|
||||
justify-self: left;
|
||||
}
|
||||
|
||||
.btnAdd2Basket {
|
||||
background-color: var(--c_blue_pastel);
|
||||
color: var(--c_blue_dark);
|
||||
border-color: var(--c_blue_dark);
|
||||
}
|
||||
|
||||
#btnCheckout, .btnBuyNow {
|
||||
background-color: var(--c_purple_pastel);
|
||||
color: var(--c_purple_dark);
|
||||
border-color: var(--c_purple_dark);
|
||||
}
|
||||
|
||||
.btn-increment, .btn-decrement {
|
||||
border: 2px solid darkgrey;
|
||||
background-color: lightgray;
|
||||
margin: 1vh 1vh;
|
||||
width: 2.5vh;
|
||||
height: 2.5vh;
|
||||
border-radius: 1.25vh;
|
||||
font-size: 2vh;
|
||||
}
|
||||
|
||||
.container-input > input {
|
||||
padding: 0vh 1vh;
|
||||
border-radius: 0.5vh;
|
||||
max-width: 7vh;
|
||||
}
|
||||
|
||||
#basket {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.basket-item-delete {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
||||
/* Right column */
|
||||
.rightcolumn {
|
||||
min-width: fit-content;
|
||||
}
|
||||
86
static/css/stylesheet.css
Normal file
@@ -0,0 +1,86 @@
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
padding: 10px;
|
||||
display: block;
|
||||
background-color: grey;
|
||||
}
|
||||
|
||||
.banner {
|
||||
background-color: black;
|
||||
color: white;
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
padding-top: 5vh;
|
||||
padding-bottom: 10vh;
|
||||
}
|
||||
|
||||
.banner.top {
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.banner.bottom {
|
||||
background-color: black;
|
||||
color: white;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.row:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.column {
|
||||
float: left;
|
||||
padding: 5vw;
|
||||
}
|
||||
|
||||
.column.side {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.column.middle {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.midbod {
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.panel {
|
||||
float: left;
|
||||
}
|
||||
|
||||
img {
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.panel.labelcontainer {
|
||||
background-color: black;
|
||||
color: white;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.label {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.label.bodytext {
|
||||
background-color: black;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
font-style: normal;
|
||||
font-size: 12;
|
||||
}
|
||||
|
||||
.label.title {
|
||||
font-style: bold;
|
||||
font-size: 18;
|
||||
}
|
||||
BIN
static/docs/Logo.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
static/docs/__pycache__/server.cpython-311.pyc
Normal file
124
static/docs/server.py
Normal file
@@ -0,0 +1,124 @@
|
||||
#! /usr/bin/env python3.6
|
||||
|
||||
"""
|
||||
server.py
|
||||
Stripe Sample.
|
||||
Python 3.6 or newer required.
|
||||
"""
|
||||
|
||||
import stripe
|
||||
import json
|
||||
import os
|
||||
|
||||
from flask import Flask, render_template, jsonify, request, send_from_directory, redirect
|
||||
from dotenv import load_dotenv, find_dotenv
|
||||
|
||||
# Setup Stripe python client library.
|
||||
load_dotenv(find_dotenv())
|
||||
|
||||
# Ensure environment variables are set.
|
||||
price = os.getenv('PRICE')
|
||||
if price is None or price == 'price_12345' or price == '':
|
||||
print('You must set a Price ID in .env. Please see the README.')
|
||||
exit(0)
|
||||
|
||||
# For sample support and debugging, not required for production:
|
||||
stripe.set_app_info(
|
||||
'stripe-samples/checkout-one-time-payments',
|
||||
version='0.0.1',
|
||||
url='https://github.com/stripe-samples/checkout-one-time-payments')
|
||||
|
||||
stripe.api_version = '2020-08-27'
|
||||
stripe.api_key = os.getenv('STRIPE_KEY_SECRET')
|
||||
|
||||
static_dir = str(os.path.abspath(os.path.join(
|
||||
__file__, "..", os.getenv("STATIC_DIR"))))
|
||||
app = Flask(__name__, static_folder=static_dir,
|
||||
static_url_path="", template_folder=static_dir)
|
||||
|
||||
|
||||
@app.route('/', methods=['GET'])
|
||||
def get_example():
|
||||
return render_template('index.html')
|
||||
|
||||
|
||||
@app.route('/config', methods=['GET'])
|
||||
def get_publishable_key():
|
||||
price = stripe.Price.retrieve(os.getenv('PRICE'))
|
||||
return jsonify({
|
||||
'publicKey': os.getenv('STRIPE_PUBLISHABLE_KEY'),
|
||||
'unitAmount': price['unit_amount'],
|
||||
'currency': price['currency']
|
||||
})
|
||||
|
||||
# Fetch the Checkout Session to display the JSON result on the success page
|
||||
@app.route('/checkout-session', methods=['GET'])
|
||||
def get_checkout_session():
|
||||
id = request.args.get('sessionId')
|
||||
checkout_session = stripe.checkout.Session.retrieve(id)
|
||||
return jsonify(checkout_session)
|
||||
|
||||
|
||||
@app.route('/create-checkout-session', methods=['POST'])
|
||||
def create_checkout_session():
|
||||
quantity = request.form.get('quantity', 1)
|
||||
domain_url = os.getenv('DOMAIN')
|
||||
|
||||
try:
|
||||
# Create new Checkout Session for the order
|
||||
# Other optional params include:
|
||||
# [billing_address_collection] - to display billing address details on the page
|
||||
# [customer] - if you have an existing Stripe Customer ID
|
||||
# [payment_intent_data] - lets capture the payment later
|
||||
# [customer_email] - lets you prefill the email input in the form
|
||||
# [automatic_tax] - to automatically calculate sales tax, VAT and GST in the checkout page
|
||||
# For full details see https://stripe.com/docs/api/checkout/sessions/create
|
||||
|
||||
# ?session_id={CHECKOUT_SESSION_ID} means the redirect will have the session ID set as a query param
|
||||
checkout_session = stripe.checkout.Session.create(
|
||||
success_url=domain_url + '/success.html?session_id={CHECKOUT_SESSION_ID}',
|
||||
cancel_url=domain_url + '/canceled.html',
|
||||
mode='payment',
|
||||
# automatic_tax={'enabled': True},
|
||||
line_items=[{
|
||||
'price': os.getenv('PRICE'),
|
||||
'quantity': quantity,
|
||||
}]
|
||||
)
|
||||
return redirect(checkout_session.url, code=303)
|
||||
except Exception as e:
|
||||
return jsonify(error=str(e)), 403
|
||||
|
||||
|
||||
@app.route('/webhook', methods=['POST'])
|
||||
def webhook_received():
|
||||
# You can use webhooks to receive information about asynchronous payment events.
|
||||
# For more about our webhook events check out https://stripe.com/docs/webhooks.
|
||||
webhook_secret = os.getenv('STRIPE_WEBHOOK_SECRET')
|
||||
request_data = json.loads(request.data)
|
||||
|
||||
if webhook_secret:
|
||||
# Retrieve the event by verifying the signature using the raw body and secret if webhook signing is configured.
|
||||
signature = request.headers.get('stripe-signature')
|
||||
try:
|
||||
event = stripe.Webhook.construct_event(
|
||||
payload=request.data, sig_header=signature, secret=webhook_secret)
|
||||
data = event['data']
|
||||
except Exception as e:
|
||||
return e
|
||||
# Get the type of webhook event sent - used to check the status of PaymentIntents.
|
||||
event_type = event['type']
|
||||
else:
|
||||
data = request_data['data']
|
||||
event_type = request_data['type']
|
||||
data_object = data['object']
|
||||
|
||||
print('event ' + event_type)
|
||||
|
||||
if event_type == 'checkout.session.completed':
|
||||
print('🔔 Payment succeeded!')
|
||||
|
||||
return jsonify({'status': 'success'})
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(port=4242, debug=True)
|
||||
63
static/docs/template webpage.html
Normal file
@@ -0,0 +1,63 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link href="../css/copiedstyles.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>My Website</h1>
|
||||
<p>Resize the browser window to see the effect.</p>
|
||||
</div>
|
||||
|
||||
<div class="topnav">
|
||||
<a href="#">Link</a>
|
||||
<a href="#">Link</a>
|
||||
<a href="#">Link</a>
|
||||
<a href="#" style="float:right">Link</a>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="leftcolumn">
|
||||
<div class="card">
|
||||
<h2>TITLE HEADING</h2>
|
||||
<h5>Title description, Dec 7, 2017</h5>
|
||||
<div class="fakeimg" style="height:200px;">Image</div>
|
||||
<p>Some text..</p>
|
||||
<p>Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>TITLE HEADING</h2>
|
||||
<h5>Title description, Sep 2, 2017</h5>
|
||||
<div class="fakeimg" style="height:200px;">Image</div>
|
||||
<p>Some text..</p>
|
||||
<p>Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rightcolumn">
|
||||
<div class="card">
|
||||
<h2>About Me</h2>
|
||||
<div class="fakeimg" style="height:100px;">Image</div>
|
||||
<p>Some text about me in culpa qui officia deserunt mollit anim..</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Popular Post</h3>
|
||||
<div class="fakeimg"><p>Image</p></div>
|
||||
<div class="fakeimg"><p>Image</p></div>
|
||||
<div class="fakeimg"><p>Image</p></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Follow Me</h3>
|
||||
<p>Some text..</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<h2>Footer</h2>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
1
static/docs/test.py
Normal file
@@ -0,0 +1 @@
|
||||
print(not None)
|
||||
BIN
static/images/Braille_Translator_Demo.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
static/images/CAD.gif
Normal file
|
After Width: | Height: | Size: 4.3 MiB |
BIN
static/images/Fractal Fortune Teller.mp4
Normal file
BIN
static/images/Invoice Generator.mp4
Normal file
BIN
static/images/Logo.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
static/images/Logo_GitHub.png
Normal file
|
After Width: | Height: | Size: 248 KiB |
BIN
static/images/Logo_LinkedIn.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
static/images/Prosthetics_Demo.gif
Normal file
|
After Width: | Height: | Size: 7.1 MiB |
BIN
static/images/Tag_Molly1.jpg
Normal file
|
After Width: | Height: | Size: 674 KiB |
BIN
static/images/Warhammer Jiggler.gif
Normal file
|
After Width: | Height: | Size: 65 MiB |
BIN
static/images/icon_basket.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
static/images/mechatronics_design.gif
Normal file
|
After Width: | Height: | Size: 65 MiB |
BIN
static/images/ms_automation.mp4
Normal file
BIN
static/images/prod_.jpg
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
static/images/prod_1.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
static/images/prod_2.jpg
Normal file
|
After Width: | Height: | Size: 140 KiB |
BIN
static/images/prod_PB0NUOSEs06ymG.jpg
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
static/images/programming_services.mp4
Normal file
BIN
static/images/webapp_db_design.mp4
Normal file
5
static/js/contact.js
Normal file
@@ -0,0 +1,5 @@
|
||||
var _loading = true;
|
||||
|
||||
function hookupPageContact() {
|
||||
_loading = false;
|
||||
}
|
||||
6
static/js/home.js
Normal file
@@ -0,0 +1,6 @@
|
||||
var _loading = true;
|
||||
|
||||
function hookupPageHome() {
|
||||
hookupVideos();
|
||||
_loading = false;
|
||||
}
|
||||
870
static/js/shared.js
Normal file
@@ -0,0 +1,870 @@
|
||||
// Shared JS file names: routing, main, shared, localStorage, appDialogs
|
||||
const _dataLoadingFlag = 'data-loading'
|
||||
var _verbose = true;
|
||||
var hashPageCurrent;
|
||||
|
||||
function hookupShared() {
|
||||
hookupVideos();
|
||||
hookupNavigation();
|
||||
}
|
||||
|
||||
function hookupVideos() {
|
||||
let videos = document.querySelectorAll('video');
|
||||
videos.forEach(function(video) {
|
||||
video.addEventListener('mouseover', videoPlay(video));
|
||||
video.addEventListener('mouseout', videoPause(video));
|
||||
});
|
||||
}
|
||||
|
||||
function videoPlay(elemVideo) {
|
||||
if (!_loading) { // elemVideo.paused &&
|
||||
elemVideo.play();
|
||||
if (_verbose) { console.log("Playing video element: " + elemVideo.name)};
|
||||
}
|
||||
}
|
||||
|
||||
function videoPause(elemVideo) {
|
||||
elemVideo.pause();
|
||||
if (_verbose) { console.log("Pausing video element: " + elemVideo.name)};
|
||||
}
|
||||
|
||||
function hookupNavigation() {
|
||||
console.log("hooking up navigation");
|
||||
|
||||
let btnNavHome = $(idNavHome);
|
||||
initialiseEventHandler(btnNavHome, flagInitialised, function() {
|
||||
btnNavHome.on("click", function(event) {
|
||||
event.stopPropagation();
|
||||
// setupPageLocalStorageNext(hashPageStoreHome);
|
||||
goToPage(hashPageHome);
|
||||
});
|
||||
});
|
||||
|
||||
let btnNavContact = $(idNavContact);
|
||||
initialiseEventHandler(btnNavContact, flagInitialised, function() {
|
||||
btnNavContact.on("click", function(event) {
|
||||
event.stopPropagation();
|
||||
// setupPageLocalStorageNext(hashPageStoreHome);
|
||||
goToPage(hashPageContact);
|
||||
});
|
||||
});
|
||||
|
||||
let btnNavStoreHome = $(idNavStoreHome);
|
||||
console.log("hooking up store home");
|
||||
console.log("btn: ", btnNavStoreHome, "\nHash: ", hashPageStoreHome, "\nflag: ", flagInitialised);
|
||||
initialiseEventHandler(btnNavStoreHome, flagInitialised, function() {
|
||||
console.log("hooking up store home");
|
||||
console.log("btn: ", btnNavStoreHome, "\nHash: ", hashPageStoreHome);
|
||||
btnNavStoreHome.on("click", function(event) {
|
||||
event.stopPropagation();
|
||||
// setupPageLocalStorageNext(hashPageStoreHome);
|
||||
goToPage(hashPageStoreHome);
|
||||
});
|
||||
});
|
||||
|
||||
hookupSelectorCurrency();
|
||||
hookupSelectorDeliveryRegion();
|
||||
hookupCheckboxIsIncludedVAT();
|
||||
}
|
||||
|
||||
function hookupOverlay(idOverlay) {
|
||||
|
||||
initialiseEventHandler(idOverlay, flagInitialised, function() {
|
||||
|
||||
let overlay = $(idOverlay)
|
||||
|
||||
// close button
|
||||
overlay.find('button.' + flagBtnOverlayClose).on("click", function(event) {
|
||||
overlay.css('display', 'none');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function hookupSelectorCurrency() {
|
||||
let elForm = $(idFormCurrency);
|
||||
let elSelector = $(elForm.find('select')[0]);
|
||||
initialiseEventHandler(elSelector, flagInitialised, function(){
|
||||
elForm = $(idFormCurrency);
|
||||
elSelector.on("change", function(event) {
|
||||
ajaxData = {};
|
||||
ajaxData[keyForm] = convertForm2JSON(elForm);
|
||||
console.log('sending data to currency selector controller: '); console.log(ajaxData);
|
||||
ajaxJSONData('select currency', mapHashToController(hashStoreSelectCurrency), ajaxData, function() { window.location.reload() }, false);
|
||||
|
||||
let optionSelected = elSelector.options[elSelector.selectedIndex]
|
||||
let textSelected = optionSelected.attr(attrDataShort)
|
||||
|
||||
});
|
||||
});
|
||||
console.log("form currency initialised")
|
||||
}
|
||||
function hookupSelectorDeliveryRegion() {
|
||||
let elForm = $(idFormDeliveryRegion);
|
||||
let elSelector = $(elForm.find('select')[0]);
|
||||
initialiseEventHandler(elSelector, flagInitialised, function(){
|
||||
elForm = $(idFormDeliveryRegion);
|
||||
elSelector.on("change", function(event) {
|
||||
ajaxData = {};
|
||||
ajaxData[keyForm] = convertForm2JSON(elForm);
|
||||
console.log('sending data to delivery region selector controller: '); console.log(ajaxData);
|
||||
ajaxJSONData('select delivery region', mapHashToController(hashStoreSelectDeliveryRegion), ajaxData, function() { window.location.reload() }, false);
|
||||
});
|
||||
console.log("form delivery region initialised")
|
||||
});
|
||||
}
|
||||
function hookupCheckboxIsIncludedVAT() {
|
||||
let elForm = $(idFormIsIncludedVAT);
|
||||
let elSelector = $(elForm.find('input[type="checkbox"]')[0]);
|
||||
initialiseEventHandler(elSelector, flagInitialised, function(){
|
||||
elForm = $(idFormIsIncludedVAT);
|
||||
elSelector.on("change", function(event) {
|
||||
ajaxData = {};
|
||||
ajaxData[keyForm] = convertForm2JSON(elForm);
|
||||
console.log('sending data to include VAT controller: '); console.log(ajaxData);
|
||||
ajaxJSONData('set include VAT', mapHashToController(hashStoreSetIsIncludedVAT), ajaxData, function() { window.location.reload() }, false);
|
||||
});
|
||||
console.log("form is included VAT initialised")
|
||||
});
|
||||
}
|
||||
|
||||
// Argument validation
|
||||
/*
|
||||
function isNullOrWhitespace(v) {
|
||||
let txt = JSON.stringify(v).replace('/\s\g', '');
|
||||
return (txt == '' || 'null');
|
||||
}
|
||||
*/
|
||||
|
||||
function isEmpty(object) {
|
||||
|
||||
let isEmpty = true;
|
||||
|
||||
if (object !== null && object !== "null" && object !== undefined && object !== "undefined") {
|
||||
|
||||
if (object.length == undefined) {
|
||||
isEmpty = false; // object exists but isn't a collection
|
||||
}
|
||||
else if (typeof object === "function") {
|
||||
isEmpty = false; // object is function reference
|
||||
}
|
||||
else { // string or collection
|
||||
|
||||
let isString = (typeof object == "string");
|
||||
|
||||
if (isString) object = object.trim();
|
||||
|
||||
if (object.length > 0) {
|
||||
|
||||
if (isString) {
|
||||
isEmpty = false; // String greater than length 0
|
||||
}
|
||||
else {
|
||||
|
||||
if (typeof object[0] != "string") {
|
||||
isEmpty = false;
|
||||
}
|
||||
else {
|
||||
for(let i = 0; i < object.length; i++) {
|
||||
if (object[i] != "") {
|
||||
isEmpty = false;
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isEmpty;
|
||||
}
|
||||
|
||||
function isValidNumber(value, positiveOnly) {
|
||||
return !isEmpty(value) && !isNaN(value) && (!positiveOnly || parseFloat(value) > 0);
|
||||
}
|
||||
|
||||
function getDataContentType(params) {
|
||||
|
||||
var data = null;
|
||||
var contentType = '';
|
||||
|
||||
if (!isEmpty(params)) {
|
||||
|
||||
if (typeof params === "string") {
|
||||
data = params;
|
||||
contentType = "application/x-www-form-urlencoded; charset=UTF-8";
|
||||
}
|
||||
else {
|
||||
data = JSON.stringify(params);
|
||||
contentType = "application/json; charset=UTF-8";
|
||||
}
|
||||
}
|
||||
|
||||
return { Data: data, ContentType: contentType };
|
||||
}
|
||||
|
||||
function arrayContainsItem(array, itemValue) {
|
||||
|
||||
var hasItem = false;
|
||||
|
||||
if (!isEmpty(array) && !isEmpty(itemValue)) {
|
||||
|
||||
var isJQueryElementArray = array[0] instanceof jQuery;
|
||||
|
||||
if (isJQueryElementArray) {
|
||||
|
||||
for (let i = 0; i < array.length; i++) {
|
||||
|
||||
if ($(array[i]).is(itemValue)) {
|
||||
hasItem = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
var isDate = array[0] instanceof Date;
|
||||
|
||||
if (isDate) {
|
||||
|
||||
for (let i = 0; i < array.length; i++) {
|
||||
|
||||
if (array[i].getTime() === itemValue.getTime()) {
|
||||
hasItem = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
for (let i = 0; i < array.length; i++) {
|
||||
|
||||
if (array[i] == itemValue) {
|
||||
hasItem = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return hasItem;
|
||||
}
|
||||
|
||||
function dictHasKey(d, k) {
|
||||
return (k in d);
|
||||
}
|
||||
|
||||
/* System Interation
|
||||
AJAX
|
||||
*/
|
||||
function xmlJSONData(methodName, objJSON) {
|
||||
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
||||
// Specify post-request actions
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||
// Parse the JSON response
|
||||
return JSON.parse(xhr.responseText);
|
||||
}
|
||||
};
|
||||
|
||||
// Specify request path
|
||||
xhr.open('GET', '/' + methodName, true);
|
||||
|
||||
// send request
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function ajaxJSONData(dataName, url, postData, successCallback, async) {
|
||||
|
||||
if (isEmpty(async)) async = true;
|
||||
let formattedParams = getDataContentType(postData);
|
||||
|
||||
$.ajax({
|
||||
async: async,
|
||||
type: 'POST',
|
||||
cache: false,
|
||||
url: url,
|
||||
data: formattedParams.Data,
|
||||
dataType: 'json',
|
||||
contentType: formattedParams.ContentType,
|
||||
success: function(result) {
|
||||
if (result.Success) {
|
||||
successCallback(result);
|
||||
}
|
||||
else {
|
||||
alertError("Error", result.Message);
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError) {
|
||||
var errorMessage = "There was an error while getting the " + dataName + " data";
|
||||
alertError("Error", errorMessage);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function mapHashToController(hash) {
|
||||
if (hash == null) return mapHashToController(hashPageHome);
|
||||
|
||||
url = _pathHost; // + '/';
|
||||
console.log("url: " + url + "\nhash: " + hash);
|
||||
return url + hash;
|
||||
|
||||
switch (hash) {
|
||||
case hashPageErrorNoPermission:
|
||||
url += 'error';
|
||||
break;
|
||||
case hashPageStoreHome:
|
||||
url += 'store/home';
|
||||
break;
|
||||
case hashPageStoreProduct:
|
||||
url += 'store/product';
|
||||
break;
|
||||
case hashStoreBasketLoad:
|
||||
url += 'store/basket_load';
|
||||
break;
|
||||
case hashStoreBasketAdd:
|
||||
url += 'store/product';
|
||||
break;
|
||||
default:
|
||||
url += '';
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
/*
|
||||
function goToPage(pageHash, parameters) {
|
||||
window.location.href = "{{ url_for(" + pageHash + (parameters == '' ? '' : ',' + parameters) + ") }}"; // getPageRoute(pageHash, parameters);
|
||||
}
|
||||
*/
|
||||
function goToPage(pageHash, parametersJSON) {
|
||||
// window.location.href = "{{ url_for(" + pageHash + (parameters == '' ? '' : ',' + parameters) + ") }}"; // getPageRoute(pageHash, parameters);
|
||||
// ajaxJSONData(pageHash, mapHashToController(pageHash), parameters, null, false);
|
||||
url = mapHashToController(pageHash);
|
||||
|
||||
|
||||
if (!isEmpty(parametersJSON)) {
|
||||
url += '%3F'; // '?';
|
||||
let firstParameter = true;
|
||||
for (var p in parametersJSON) {
|
||||
// url += p + '=' + parametersJSON[p];
|
||||
if (!firstParameter) {
|
||||
url += '&';
|
||||
} else {
|
||||
firstParameter = false;
|
||||
}
|
||||
url += parametersJSON[p];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
window.location.href = url;
|
||||
// ajaxJSONData(pageHash, url, parametersJSON, loadPageBody, false);
|
||||
}
|
||||
|
||||
function htmlEncode(value) {
|
||||
return $('<div/>').text(value).html();
|
||||
}
|
||||
|
||||
var _domParser = null;
|
||||
function htmlDecode(value) {
|
||||
if (_domParser == null) _domParser = DOMParser(); // https://www.w3docs.com/snippets/javascript/how-to-html-encode-a-string.html
|
||||
return _domParser.parseFromString(value, 'text/html').documentElement.textContent;
|
||||
}
|
||||
|
||||
function convertForm2JSON(elemForm) {
|
||||
|
||||
formData = {}
|
||||
|
||||
formDataTmp = elemForm.serializeArray();
|
||||
|
||||
$.each(formDataTmp, function(index, field) {
|
||||
formData[field.name] = field.value;
|
||||
/*
|
||||
console.log('field name: ' + field.name);
|
||||
console.log('field value: ' + field.value);
|
||||
console.log('field currentval: ' + getElementCurrentValue(field));
|
||||
*/
|
||||
});
|
||||
|
||||
return formData;
|
||||
}
|
||||
|
||||
function loadPageBody(response) {
|
||||
|
||||
let pageBody = $(idPageBody);
|
||||
|
||||
console.log('ajax:');
|
||||
console.log(response.data);
|
||||
|
||||
pageBody.html(response.data['html_block']);
|
||||
}
|
||||
|
||||
/* Page elements */
|
||||
function initialiseEventHandler(elSelector, initialisedClass, eventHandler) {
|
||||
|
||||
// only add once
|
||||
var elObject = $(elSelector);
|
||||
if (elObject.hasClass(initialisedClass)) return;
|
||||
|
||||
// add event handler
|
||||
eventHandler();
|
||||
|
||||
// flag as initialised
|
||||
elObject.addClass(initialisedClass);
|
||||
}
|
||||
|
||||
function alertError(errorType, errorText) {
|
||||
alert(errorType + '\n' + errorText);
|
||||
}
|
||||
|
||||
function setPageToLoading(isLoading) {
|
||||
|
||||
if (isLoading) {
|
||||
$(document.body).addClass(_dataLoadingFlag);
|
||||
}
|
||||
else {
|
||||
$(document.body).removeClass(_dataLoadingFlag);
|
||||
}
|
||||
}
|
||||
|
||||
function displayOverlay(message, show, force) {
|
||||
|
||||
if (show) {
|
||||
_overlayLoadingCount += 1;
|
||||
}
|
||||
else if (force) {
|
||||
_overlayLoadingCount = 0;
|
||||
}
|
||||
else {
|
||||
_overlayLoadingCount -= 1;
|
||||
if (_overlayLoadingCount < 0) _overlayLoadingCount = 0;
|
||||
}
|
||||
|
||||
var loadingImg = $(idImageLoading);
|
||||
var overlay = $(loadingImg.closest("div.overlay"));
|
||||
|
||||
if (_overlayLoadingCount == 0) {
|
||||
|
||||
// Prevent short glimpse of prev. content before switch to new content
|
||||
// caused by data load but not fully rendered
|
||||
setTimeout(function() {
|
||||
overlay.fadeOut();
|
||||
}, 100);
|
||||
}
|
||||
else if (show && _overlayLoadingCount == 1) {
|
||||
// only show once
|
||||
loadingImg.html(message);
|
||||
overlay.show();
|
||||
}
|
||||
}
|
||||
|
||||
function setBackgroundToLoading(elId, isLoading) {
|
||||
|
||||
if (isEmpty(el)) {
|
||||
|
||||
var elObj = $(elId);
|
||||
|
||||
if (isLoading) {
|
||||
|
||||
setTimeout(function() {
|
||||
elObj.html("");
|
||||
elObj.css({
|
||||
"background-image": "url(" + urlImgLoading + ")",
|
||||
"background-position": "center",
|
||||
"background-repeat": "no-repeat"
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
else {
|
||||
elObj.css("background-image", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function allowClick() {
|
||||
return !$("body").hasClass(_dataLoadingFlag);
|
||||
}
|
||||
|
||||
function imageExists(url, callback) {
|
||||
|
||||
var img = new Image();
|
||||
|
||||
img.onload = function() { callback(true); };
|
||||
img.onerror = function() { callback(false); };
|
||||
img.src = url;
|
||||
}
|
||||
|
||||
function validateImageUrl(id, img) {
|
||||
imageExists(img, function(exists) {
|
||||
if (exists) {
|
||||
$("#" + id).css({ "background-image": "url(" + url + ")", "background-size": "35px 35px"})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function getElementCurrentValue(el) {
|
||||
let returnVal = '';
|
||||
let element = $(el);
|
||||
|
||||
if (!isEmpty(el)) {
|
||||
|
||||
if (element.is("input:checkbox")) {
|
||||
returnVal = (element.is(":checked"));
|
||||
}
|
||||
/*
|
||||
else if (element.hasClass(flagIsDatePicker)) {
|
||||
returnVal = getDatePickerDate(element, adjust4DayLightSavings);
|
||||
}
|
||||
*/
|
||||
else if (element.is("input") || element.is("textarea") || element.is("select")) {
|
||||
returnVal = element.val();
|
||||
}
|
||||
else {
|
||||
returnVal = element.text();
|
||||
}
|
||||
}
|
||||
|
||||
if (isEmpty(returnVal)) returnVal = '';
|
||||
|
||||
return returnVal;
|
||||
}
|
||||
|
||||
function parseCSSPropertyToFloat(element, propertyName) {
|
||||
var propertyText = element.css(propertyName);
|
||||
|
||||
if (!isEmpty(propertyText)) {
|
||||
|
||||
propertyText = propertyText.replace('px', '');
|
||||
|
||||
if (!isValidNumber(propertyText, true)) return parseFloat(propertyText);
|
||||
}
|
||||
|
||||
return 0.00;
|
||||
}
|
||||
|
||||
function scrollToElement(parent, element) {
|
||||
// REQUIRED: parent has scroll-bar
|
||||
parent.scrollTop(parent.scrollTop() + (element.offset().top - parent.offset().top));
|
||||
}
|
||||
|
||||
function isElementInContainer(container, element) {
|
||||
|
||||
if (typeof jQuery === 'function') {
|
||||
if (container instanceof jQuery) container = container[0];
|
||||
if (element instanceof jQuery) element = element[0];
|
||||
}
|
||||
|
||||
var containerBounds = container.getBoundingClientRect();
|
||||
var elementBounds = element.getBoundingClientRect();
|
||||
|
||||
return (
|
||||
containerBounds.top <= elementBounds.top &&
|
||||
containerBounds.left <= elementBounds.left &&
|
||||
((elementBounds.top + elementBounds.height) <= (containerBounds.top + containerBounds.height)) &&
|
||||
((elementBounds.left + elementBounds.width) <= (containerBounds.left + containerBounds.width))
|
||||
);
|
||||
}
|
||||
|
||||
// Date picker inputs
|
||||
/*
|
||||
function hookupInputDatePickers(dateInputs, notFuture, notPast, parent, addClearOption) {
|
||||
|
||||
if (!isEmpty(dateInputs)) {
|
||||
|
||||
let currentInput, currentDateString, currentDate, exceptionsArray;
|
||||
|
||||
for (let i = 0; i < dateInputs.length; i++) {
|
||||
|
||||
currentInput = $(dateInputs[i]);
|
||||
currentDateString = currentInput.val();
|
||||
currentDate = (!isEmpty(currentDateString)) ? convertDDMMYYYYString2Date(currentDateString, false) : null;
|
||||
exceptionsArray = (currentDate != null) ? [currentDate] : null;
|
||||
|
||||
turnInputIntoDatePicker(currentInput, notFuture, notPast, exceptionsArray);
|
||||
}
|
||||
|
||||
if (!isEmpty(parent)) {
|
||||
// stop user from manually typing date except backspace and delete
|
||||
// which will clear the whole value to ensure we either have a whole
|
||||
// date string or none
|
||||
|
||||
parent.on("keydown", isDatePickerSelector, function(event) {
|
||||
if (event.keyCode == 46 | event.keyCode == 8) { // delete or backspace
|
||||
$(this).val('');
|
||||
}
|
||||
else {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
|
||||
return false
|
||||
});
|
||||
|
||||
if (addClearOption) {
|
||||
|
||||
// if user right-clicks in date input, give option to clear the date
|
||||
parent.contextMenu({
|
||||
selector: isDatePickerSelector,
|
||||
delay: 100,
|
||||
autoHide: true,
|
||||
position: function(opt, x, y) {
|
||||
var event = opt.$trigger[0]?.ownerDocument?.defaultView?.event || event;
|
||||
opt.$menu.position({ my: 'center top', at: 'center top', of: event });
|
||||
},
|
||||
items: {
|
||||
"clears": {
|
||||
name: "Clear Date",
|
||||
icon: "delete",
|
||||
disabled: function(key, opt) { return isEmpty($(opt.$trigger)); }, // if it's already empty, don't do anything
|
||||
callback: function(itemKey, opt, rootMenu, originalEvent) { var input = $(opt.$trigger); input.val(''); input.trigger('change'); }
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function turnInputIntoDatePicker(input, notFuture, notPast, exceptionValueArray) {
|
||||
|
||||
var beforeShowDayCallBack = null;
|
||||
|
||||
if (notFuture || notPast) {
|
||||
|
||||
var today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
|
||||
var tomorrow = new Date();
|
||||
tomorrow.setDate(today.getDate() + 1);
|
||||
tomorrow.setHours(0, 0, 0, 0);
|
||||
|
||||
var hasExceptions = !isEmpty(exceptionValueArray);
|
||||
|
||||
beforeShowDayCallBack = function(date) {
|
||||
|
||||
var selectedDate = date.getTime();
|
||||
var fieldHasException = hasExceptions && arrayContainsItem(exceptionValueArray, date);
|
||||
|
||||
if (notFuture && (tomorrow < selectedDate) && fieldHasException) return [false, 'redday', 'You cannot choose a future date'];
|
||||
if (notPast && (selectedDate < today) && fieldHasException) return [false, 'redday', 'You cannot choose a past date'];
|
||||
|
||||
return [true, '', ''];
|
||||
};
|
||||
}
|
||||
|
||||
input.datepicker({
|
||||
dateFormat: 'dd-mm-yy',
|
||||
navigationAsDateFormat: true,
|
||||
beforeShowDay: beforeShowDayCallBack
|
||||
});
|
||||
|
||||
// prevent datepicker from appearing on right click
|
||||
input.on('contextmenu', function() { $(this).datepicker('hide'); });
|
||||
|
||||
// Disable autocomplete suggestions appearing when clicking on input
|
||||
input.attr('autocomplete', 'off');
|
||||
}
|
||||
|
||||
function setDatePickerDate(input, objDate) {
|
||||
if (!isEmpty(objDate)) {
|
||||
input.val('');
|
||||
}
|
||||
else {
|
||||
input.datepicker('setDate', objDate);
|
||||
}
|
||||
}
|
||||
|
||||
function getDatePickerDate(input, adjust4DayLightSavings) {
|
||||
|
||||
var date = null;
|
||||
|
||||
if (!isEmpty(input)) {
|
||||
date = input.datepicker('getDate');
|
||||
|
||||
if (adjust4DayLightSavings) {
|
||||
formatDateDayLightSavingsTime(date);
|
||||
}
|
||||
}
|
||||
|
||||
return date;
|
||||
}
|
||||
|
||||
function formatDateDayLightSavingsTime(date) {
|
||||
// JSON.stringify removes hour delta for daylight savings
|
||||
// e.g. 13/11/2023 01:00:00 goes to 13/11/2023 00:00:00
|
||||
// this adds an hour so it becomes the correct time when stringified
|
||||
if (!isEmpty(date)) {
|
||||
date.setTime(date.getTime() - date.getTimezoneOffset() * 60 * 1000)
|
||||
}
|
||||
}
|
||||
*/
|
||||
function convertJSONDateString2Date(dateStr) {
|
||||
if (isEmpty(dateStr)) return null;
|
||||
if (dateStr instanceof Date) return dateStr;
|
||||
return new Date(parseInt(dateStr.substr(6)));
|
||||
}
|
||||
|
||||
function convertDDMMYYYYString2Date(dateStr, adjust4DayLightSavings) {
|
||||
var date = null;
|
||||
|
||||
if (!isEmpty(dateStr)) {
|
||||
if (dateStr instanceof Date) {
|
||||
date = dateStr;
|
||||
}
|
||||
else {
|
||||
var dateParts = dateStr.split('-');
|
||||
|
||||
if (dateParts.length == 3) {
|
||||
date = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);
|
||||
}
|
||||
}
|
||||
|
||||
if (adjust4DayLightSavings && !isEmpty(date)) {
|
||||
formatDateDayLightSavingsTime(date);
|
||||
}
|
||||
}
|
||||
|
||||
return date;
|
||||
}
|
||||
|
||||
function convertDate2DDMMYYYYString(date) {
|
||||
if (isEmpty(date)) return '';
|
||||
|
||||
try {
|
||||
var dd = date.getDate();
|
||||
var mm = date.getMonth() + 1;
|
||||
var yyyy = date.getFullYear();
|
||||
|
||||
if (dd < 10) dd = '0' + dd;
|
||||
if (dd < 10) mm = '0' + mm;
|
||||
|
||||
return dd + '-' + mm + '-' + yyyy;
|
||||
}
|
||||
catch (err) {
|
||||
return 'Formatting error';
|
||||
}
|
||||
}
|
||||
|
||||
// Textareas
|
||||
function removeBlankTextAreaLines(textarea) {
|
||||
textarea.val(textarea.val.replace(/(?:(?:\r\n|\r|\n)\s*){2}/gm, ''));
|
||||
}
|
||||
|
||||
function fitTextAreasToContent(parent) {
|
||||
var textareas = parent.find('textarea');
|
||||
|
||||
if (!isEmpty(textareas)) {
|
||||
for (var t = 0; t < textareas.length; t++) {
|
||||
fitTextAreaToContent($(textareas[t]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fitTextAreaToContent(textarea) {
|
||||
// Trim new text
|
||||
var txtNew = textarea.val().trim();
|
||||
textarea.val(txtNew);
|
||||
|
||||
var elTextarea = textarea[0];
|
||||
|
||||
// Clear style height and set rows = 1
|
||||
elTextarea.style.removeProperty('height');
|
||||
textarea.attr('rows', 1);
|
||||
|
||||
const paddingTop = parseCSSPropertyToFloat(textarea, 'padding-top');
|
||||
const paddingBottom= parseCSSPropertyToFloat(textarea, 'padding-bottom');
|
||||
const borderTop = parseCSSPropertyToFloat(textarea, 'border-top');
|
||||
const borderBottom = parseCSSPropertyToFloat(textarea, 'border-bottom');
|
||||
let heightDelta = paddingTop + paddingBottom + borderTop + borderBottom;
|
||||
let heightNew = elTextarea.scrollHeight + heightDelta;
|
||||
|
||||
// If new height is less than 1 linem default to single line height
|
||||
const heightSingleLine = parseCSSPropertyToFloat(textarea, 'line-height') + heightDelta;
|
||||
if (heightNew < heightSingleLine) heightNew = heightSingleLine;
|
||||
|
||||
elTextarea.style.height = heightNew + 'px';
|
||||
}
|
||||
|
||||
|
||||
// Data tables
|
||||
function getDataTableCellByNode(table, elRow, indexColumn) {
|
||||
// normal jQuery selector won't pick up hidden columns
|
||||
return $(table.DataTable().cells(elRow, indexColumn, null).nodes());
|
||||
}
|
||||
|
||||
function outputTableElementDateInput(table, elRow, indexColumn, value) {
|
||||
|
||||
let currentCell = getDataTableCellByNode(table, elRow, indexColumn);
|
||||
|
||||
let dateTxt = '';
|
||||
|
||||
if (!isEmpty(value)) {
|
||||
if (typeof value === 'string') value = convertJSONDateString2Date(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Local storage
|
||||
/*
|
||||
function getPageLocalStorage(pageHash) {
|
||||
|
||||
let ls;
|
||||
try {
|
||||
ls = JSON.parse(localStorage.getItem(pageHash));
|
||||
} catch {
|
||||
|
||||
}
|
||||
|
||||
if (isEmpty(ls)) return {}
|
||||
|
||||
return ls;
|
||||
}
|
||||
function getPageLocalStorageCurrent() {
|
||||
|
||||
return JSON.parse(localStorage.getItem(hashPageCurrent));
|
||||
}
|
||||
|
||||
function setPageLocalStorage(pageHash, newLS) {
|
||||
|
||||
localStorage.setItem(pageHash, JSON.stringify(newLS));
|
||||
}
|
||||
|
||||
function clearPageLocalStorage(pageHash) {
|
||||
localStorage.removeItem(pageHash);
|
||||
}
|
||||
|
||||
function setupPageLocalStorage(pageHash) {
|
||||
|
||||
let ls = getPageLocalStorage(pageHash);
|
||||
|
||||
if (isEmpty(ls)) ls = {};
|
||||
|
||||
setPageLocalStorage(pageHash, ls);
|
||||
}
|
||||
*/
|
||||
|
||||
function getLocalStorage(key) {
|
||||
|
||||
return JSON.parse(localStorage.getItem(key));
|
||||
}
|
||||
|
||||
function setLocalStorage(key, newLS) {
|
||||
|
||||
localStorage.setItem(key, JSON.stringify(newLS));
|
||||
}
|
||||
|
||||
/*
|
||||
function setupPageLocalStorageNext(pageHashNext) {
|
||||
let lsOld = getPageLocalStorage(hashPageCurrent);
|
||||
hashPageCurrent = pageHashNext;
|
||||
clearPageLocalStorage(hashPageCurrent);
|
||||
setupPageLocalStorage(hashPageCurrent);
|
||||
let lsNew = getPageLocalStorage(hashPageCurrent);
|
||||
lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};
|
||||
setPageLocalStorage(hashPageCurrent, lsNew);
|
||||
}
|
||||
*/
|
||||
28
static/js/store_admin.js
Normal file
@@ -0,0 +1,28 @@
|
||||
var _loading = true;
|
||||
|
||||
function hookupPageStorePageAdmin() {
|
||||
_loading = false;
|
||||
|
||||
hookupBtnProductNew();
|
||||
hookupBtnPriceNew();
|
||||
}
|
||||
|
||||
function hookupBtnProductNew() {
|
||||
let btnProductNew = $(idBtnProductNew);
|
||||
btnProductNew.removeClass(flagInitialised);
|
||||
initialiseEventHandler(idBtnProductNew, flagInitialised, function() {
|
||||
btnProductNew.on("click", function(event) {
|
||||
goToPage(hashPageStoreProductNew);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function hookupBtnPriceNew() {
|
||||
let btnPriceNew = $(idBtnPriceNew);
|
||||
btnPriceNew.removeClass(flagInitialised);
|
||||
initialiseEventHandler(idBtnPriceNew, flagInitialised, function() {
|
||||
btnPriceNew.on("click", function(event) {
|
||||
goToPage(hashPageStorePriceNew);
|
||||
});
|
||||
});
|
||||
}
|
||||
35
static/js/store_home.js
Normal file
@@ -0,0 +1,35 @@
|
||||
var _loading = true;
|
||||
|
||||
function hookupStorePageHome() {
|
||||
_loading = false;
|
||||
|
||||
hookupStoreCardsProduct();
|
||||
}
|
||||
|
||||
function hookupStoreCardsProduct() {
|
||||
|
||||
let d; // , lsShared;
|
||||
// let selectorCardProduct = '.card.subcard';
|
||||
$('div.card.subcard[' + attrIdProduct +']').each(function() {
|
||||
|
||||
var product = $(this);
|
||||
initialiseEventHandler(product, flagInitialised, function() {
|
||||
product = $(product);
|
||||
console.log("initialising product: ", product);
|
||||
product.on("click", function(event) {
|
||||
// d = { keyIdProduct: product.attr(attrIdProduct) }
|
||||
var elemClicked = event.target;
|
||||
if (elemClicked.id != 'submit') { // disable for submit buttons
|
||||
console.log("product click: " + product.attr(attrIdProduct));
|
||||
console.log("permutation click: " + product.attr(attrIdPermutation));
|
||||
var d = {}
|
||||
d[keyIdProduct] = product.attr(attrIdProduct)
|
||||
d[keyIdPermutation] = product.attr(attrIdPermutation)
|
||||
// send quantity requested
|
||||
goToPage(hashPageStoreProduct, d);
|
||||
}
|
||||
});
|
||||
console.log("click method added for product ID: " + product.attr(attrIdProduct) + ', permutation ID: ', product.attr(attrIdPermutation));
|
||||
});
|
||||
});
|
||||
}
|
||||
178
static/js/store_page_basket.js
Normal file
@@ -0,0 +1,178 @@
|
||||
var _loading = true;
|
||||
|
||||
function hookupStorePageBasket() {
|
||||
_loading = false;
|
||||
|
||||
hookupStoreCardsInfo();
|
||||
hookupOverlaysStoreBasketInfo();
|
||||
hookupBtnCheckoutSession();
|
||||
}
|
||||
|
||||
function hookupStoreCardsInfo() {
|
||||
|
||||
$(idContainerInfoDelivery).on("click", function(event) {
|
||||
console.log("delivery modal display method");
|
||||
$(idOverlayInfoDelivery).css('display', 'block');
|
||||
});
|
||||
|
||||
$(idContainerInfoBilling).on("click", function(event) {
|
||||
console.log("billing modal display method");
|
||||
$(idOverlayInfoBilling).css('display', 'block');
|
||||
});
|
||||
}
|
||||
|
||||
function hookupOverlaysStoreBasketInfo() {
|
||||
|
||||
let elOverlay, elForm;
|
||||
|
||||
// Delivery
|
||||
elOverlay = $(idOverlayInfoDelivery);
|
||||
elForm = elOverlay.find('form');
|
||||
|
||||
hookupOverlay(elOverlay);
|
||||
initialiseEventHandler(elForm, flagInitialised, function() {
|
||||
elForm.submit(function(event) {
|
||||
elForm = $(elForm);
|
||||
event.preventDefault();
|
||||
console.log("delivery submit method");
|
||||
|
||||
ajaxData = {};
|
||||
ajaxData[keyInfoType] = keyInfoDelivery;
|
||||
ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoDelivery);
|
||||
|
||||
ajaxJSONData('info delivery', mapHashToController(hashStoreBasketInfo), ajaxData, loadInfoAddress, false);
|
||||
// $(idOverlayInfoDelivery).css('display', 'none');
|
||||
});
|
||||
});
|
||||
|
||||
// Billing
|
||||
elOverlay = $(idOverlayInfoBilling);
|
||||
elForm = elOverlay.find('form');
|
||||
|
||||
hookupOverlay(elOverlay);
|
||||
initialiseEventHandler(elForm, flagInitialised, function() {
|
||||
elForm.submit(function(event) {
|
||||
event.preventDefault();
|
||||
console.log("billing submit method");
|
||||
|
||||
ajaxData = {};
|
||||
ajaxData[keyInfoType] = keyInfoBilling;
|
||||
ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoBilling); // formData; // form.serialize();
|
||||
|
||||
ajaxJSONData('info billing', mapHashToController(hashStoreBasketInfo), ajaxData, loadInfoAddress, false);
|
||||
// $(idOverlayInfoBilling).css('display', 'none');
|
||||
});
|
||||
});
|
||||
let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyCity, keyCounty];
|
||||
for (var k in keys) {
|
||||
elForm.find('#' + keys[k]).removeAttr('required');
|
||||
}
|
||||
}
|
||||
|
||||
function loadInfoAddress(response) {
|
||||
|
||||
console.log('ajax:'); console.log(response.data);
|
||||
let infoType = response.data[keyInfoType];
|
||||
let infoAddress = response.data[infoType];
|
||||
setLocalStorage(infoType, infoAddress);
|
||||
|
||||
// update webpage elements in background
|
||||
if (infoType == keyInfoBilling) {
|
||||
|
||||
let container = $(idContainerInfoBilling);
|
||||
if (infoAddress[keyInfoIdentical]) {
|
||||
container.find('div').html("Same as delivery address");
|
||||
} else {
|
||||
container.find('div').html("<strong>" + infoAddress[keyNameFull] + '</strong> at <strong>' + infoAddress[keyPostcode] + "</strong>");
|
||||
}
|
||||
|
||||
$(idOverlayInfoBilling).css('display', 'none');
|
||||
|
||||
$(idOverlayInfoBilling).find('form').addClass(flagSubmitted);
|
||||
} else {
|
||||
|
||||
let container = $(idContainerInfoDelivery);
|
||||
container.find('div').html("<strong>" + infoAddress[keyNameFull] + '</strong> at <strong>' + infoAddress[keyPostcode] + "</strong>");
|
||||
|
||||
$(idOverlayInfoDelivery).css('display', 'none');
|
||||
|
||||
$(idOverlayInfoDelivery).find('form').addClass(flagSubmitted);
|
||||
}
|
||||
}
|
||||
|
||||
function convertFormBilling2JSON(ajaxData, idOverlayInfo) {
|
||||
|
||||
let elOverlay, elForm, elOverlayDelivery, elFormDelivery;
|
||||
|
||||
elOverlay = $(idOverlayInfo);
|
||||
elForm = elOverlay.find('form');
|
||||
elOverlay = $(idOverlayInfoDelivery);
|
||||
elForm = elOverlay.find('form');
|
||||
|
||||
console.log('converting billing form to json\nform ID: ' + elForm.id);
|
||||
ajaxData[keyForm] = convertForm2JSON(elForm); // formData; // form.serialize();
|
||||
let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyAddress2, keyCity, keyCounty];
|
||||
console.log('ajaxData:');
|
||||
console.log(ajaxData);
|
||||
ajaxData[keyForm][keyInfoIdentical] = getElementCurrentValue(elForm.find('#' + keyInfoIdentical));
|
||||
for (var k in keys) {
|
||||
if (idOverlayInfo == idOverlayInfoBilling && ajaxData[keyForm][keyInfoIdentical]) {
|
||||
ajaxData[keyForm][keys[k]] = getElementCurrentValue(elFormDelivery.find('#' + keys[k]));
|
||||
} else {
|
||||
ajaxData[keyForm][keys[k]] = getElementCurrentValue(elForm.find('#' + keys[k]));
|
||||
}
|
||||
}
|
||||
console.log('ajaxData:');
|
||||
console.log(ajaxData);
|
||||
return ajaxData;
|
||||
}
|
||||
|
||||
function hookupBtnCheckoutSession() {
|
||||
let btnCheckout = $(idBtnCheckout);
|
||||
btnCheckout.removeClass(flagInitialised);
|
||||
initialiseEventHandler(idBtnCheckout, flagInitialised, function() {
|
||||
|
||||
btnCheckout.off("click");
|
||||
btnCheckout.on("click", function(event) {
|
||||
|
||||
|
||||
//setupPageLocalStorageNext(hashPageStoreBasket);
|
||||
let basket = getLocalStorage(keyBasket);
|
||||
// goToPage(hashPageStoreBasket);
|
||||
let ajaxData = {};
|
||||
ajaxData[keyBasket] = basket;
|
||||
ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoDelivery);
|
||||
ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoBilling);
|
||||
ajaxData[key_code_currency] = getCurrencySelected();
|
||||
// ajaxData[keyIsSubscription] = false; // only checkout one-time payment items for now
|
||||
|
||||
ajaxJSONData('checkout session', mapHashToController(hashPageStoreCheckout), ajaxData, handleResponseCheckout, false);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function handleResponseCheckout(response) {
|
||||
// let tmpData = {};
|
||||
// tmpData[keyIdCheckout] = response.data[keyIdCheckout]
|
||||
// goToPage(hashPageStoreCheckoutSession, tmpData);
|
||||
window.location.href = response.data[keyUrlCheckout]
|
||||
}
|
||||
|
||||
function hookupBtnFormBillingCopy() {
|
||||
|
||||
// let elBtn = $(idBtnFormBillingCopy);
|
||||
|
||||
initialiseEventHandler(idBtnFormBillingCopy, flagInitialised, function() {
|
||||
$(idBtnFormBillingCopy).on("click", function (event) {
|
||||
|
||||
let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyAddress2, keyCity, keyCounty];
|
||||
|
||||
let elFormBilling = $(idOverlayInfoBilling).find('form');
|
||||
let elFormDelivery = $(idOverlayInfoDelivery).find('form');
|
||||
|
||||
for (var k in keys) {
|
||||
elFormBilling.find('#' + keys[k]).val(getElementCurrentValue(elFormDelivery.find('#' + keys[k])));
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
5
static/js/store_product.js
Normal file
@@ -0,0 +1,5 @@
|
||||
var _loading = true;
|
||||
|
||||
function hookupStorePageProduct() {
|
||||
_loading = false;
|
||||
}
|
||||
363
static/js/store_shared.js
Normal file
@@ -0,0 +1,363 @@
|
||||
|
||||
|
||||
function hookupStore() {
|
||||
console.log('hookup store start');
|
||||
console.log(_pathHost);
|
||||
hookupLocalStorageStore();
|
||||
hookupBasket();
|
||||
hookupBtnsAdd2Basket();
|
||||
}
|
||||
|
||||
function hookupBasket() {
|
||||
|
||||
// const containerBasket = $(idContainerBasket);
|
||||
|
||||
toggleShowBtnCheckout(); // containerBasket
|
||||
hookupBtnCheckout();
|
||||
hookupBtnsPlusMinus();
|
||||
hookupBasketAddInputs();
|
||||
hookupBasketEditInputs();
|
||||
hookupBtnsDelete();
|
||||
}
|
||||
|
||||
function hookupLocalStorageStore() {
|
||||
|
||||
// setupPageLocalStorage(hashPageCurrent);
|
||||
// let lsPage = getPageLocalStorage(hashPageCurrent);
|
||||
// let d = {}
|
||||
// d[keyBasket] = getLocalStorage(keyBasket); // (keyBasket in lsPage) ? lsPage[keyBasket] : {'items': []};
|
||||
// console.log('d:'); console.log(d);
|
||||
let basket;
|
||||
let createNewBasket = true;
|
||||
if (true) { // !isUserLoggedIn) {
|
||||
try {
|
||||
basket = getLocalStorage(keyBasket);
|
||||
console.log('basket found: '); console.log(basket);
|
||||
createNewBasket = isEmpty(basket);
|
||||
}
|
||||
catch {
|
||||
|
||||
}
|
||||
// lsPage[keyBasket] = ajaxJSONData(keyBasket, hashStoreBasketLoad, d, loadBasket, false);
|
||||
}
|
||||
else {
|
||||
// store basket from server in localStorage
|
||||
|
||||
}
|
||||
if (createNewBasket) {
|
||||
basket = {'items': []};
|
||||
setLocalStorage(keyBasket, basket);
|
||||
console.log("new local basket created");
|
||||
}
|
||||
let ajaxData = {}
|
||||
ajaxData[keyBasket] = basket;
|
||||
// console.log('ajax:' + ajaxData);
|
||||
ajaxJSONData(keyBasket, mapHashToController(hashStoreBasketLoad), ajaxData, loadBasket, false);
|
||||
}
|
||||
|
||||
/*
|
||||
function setupPageLocalStorageNextStore(pageHashNext) {
|
||||
let lsOld = getPageLocalStorage(hashPageCurrent);
|
||||
hashPageCurrent = pageHashNext;
|
||||
clearPageLocalStorage(hashPageCurrent);
|
||||
setupPageLocalStorage(hashPageCurrent);
|
||||
let lsNew = getPageLocalStorage(hashPageCurrent);
|
||||
lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};
|
||||
setPageLocalStorage(hashPageCurrent, lsNew);
|
||||
}
|
||||
|
||||
function goToPageStore(pageHash, parameters_dict) {
|
||||
|
||||
let lsOld = getPageLocalStorage(pageHashCurrent);
|
||||
pageHashCurrent = pageHash;
|
||||
clearPageLocalStorage(pageHashCurrent);
|
||||
setupPageLocalStorage(pageHashCurrent);
|
||||
let lsNew = getPageLocalStorage(pageHashCurrent);
|
||||
lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};
|
||||
setPageLocalStorage(pageHashCurrent, lsNew);
|
||||
|
||||
goToPage(pageHash, parameters_dict);
|
||||
}
|
||||
*/
|
||||
|
||||
function toggleShowBtnCheckout() { // containerBasket
|
||||
|
||||
console.log("toggling checkout button");
|
||||
|
||||
const btnCheckout = $(idBtnCheckout);
|
||||
const labelBasketEmpty = $(idLabelBasketEmpty);
|
||||
|
||||
// let lsPage = getPageLocalStorage(hashPageCurrent);
|
||||
// let basket = lsPage[keyBasket]['items'];
|
||||
// let products = containerBasket.filter('');
|
||||
let basket = getLocalStorage(keyBasket);
|
||||
|
||||
if (basket['items'].length == 0) {
|
||||
btnCheckout.hide();
|
||||
labelBasketEmpty.show();
|
||||
} else {
|
||||
btnCheckout.show();
|
||||
labelBasketEmpty.hide();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
function getBasket() {
|
||||
|
||||
lsShared = getPageLocalStorage(keyShared);
|
||||
|
||||
return lsShared[keyBasket];
|
||||
}
|
||||
*/
|
||||
|
||||
function hookupBtnsAdd2Basket() {
|
||||
|
||||
// let product, btn, lsPage;
|
||||
// [' + attrIdProduct + '=' + elBtn.attr(attrIdProduct) + ']
|
||||
$('form[' + attrFormType + '="' + typeFormBasketAdd +'"]').each(function() {
|
||||
|
||||
var form = $(this);
|
||||
|
||||
initialiseEventHandler(form, flagInitialised, function() {
|
||||
// form = $(form);
|
||||
form.submit(function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
// lsShared = getPageLocalStorage(keyShared);
|
||||
console.log("adding to basket for product ID: ", form.attr(attrIdProduct));
|
||||
|
||||
ajaxData = {};
|
||||
ajaxData[keyIdProduct] = form.attr(attrIdProduct);
|
||||
ajaxData[keyIdPermutation] = form.attr(attrIdPermutation);
|
||||
basket = getLocalStorage(keyBasket);
|
||||
ajaxData[keyBasket] = basket; // lsShared[keyBasket];
|
||||
console.log("basket before add: ", basket);
|
||||
ajaxData[keyForm] = convertForm2JSON(form); // formData; // form.serialize();
|
||||
console.log("ajax data:"); console.log(ajaxData);
|
||||
ajaxJSONData('add2Basket', mapHashToController(hashStoreBasketAdd), ajaxData, loadBasket, false); // { product_id: form.attr(attrIdProduct), basket_local: lsPage[keyBasket] , }
|
||||
});
|
||||
console.log("basket add method added for product ID: ", form.attr(attrIdProduct));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function hookupBtnCheckout() {
|
||||
|
||||
console.log("hooking up checkout button");
|
||||
|
||||
const btnCheckout = $(idBtnCheckout);
|
||||
// let lsPage = getPageLocalStorage(hashPageCurrent);
|
||||
initialiseEventHandler(btnCheckout, flagInitialised, function() {
|
||||
btnCheckout.on("click", function() {
|
||||
/*
|
||||
//setupPageLocalStorageNext(hashPageStoreBasket);
|
||||
let basket = getLocalStorage(keyBasket);
|
||||
// goToPage(hashPageStoreBasket);
|
||||
let ajaxData = {};
|
||||
ajaxData[keyBasket] = basket;
|
||||
|
||||
ajaxJSONData('checkout', mapHashToController(hashPageStoreBasket), ajaxData, null, false);
|
||||
*/
|
||||
goToPage(hashPageStoreBasket);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function loadBasket(response) {
|
||||
|
||||
let basketContainer = $(idBasketContainer);
|
||||
// let lsPage = getPageLocalStorage(hashPageCurrent);
|
||||
// let lsShared = getPageLocalStorage(keyShared);
|
||||
|
||||
console.log('ajax:'); console.log(response.data);
|
||||
|
||||
let basket = response.data[keyBasket]; // JSON.parse(response.data[keyBasket]);
|
||||
// setPageLocalStorage(keyShared, lsShared);
|
||||
setLocalStorage(keyBasket, basket);
|
||||
items = basket['items'];
|
||||
// console.log('old basket:'); console.log(basketContainer.html());
|
||||
// console.log('setting basket:'); console.log(response.data['html_block']);
|
||||
basketContainer.html(response.data['html_block']);
|
||||
|
||||
/*
|
||||
if (items.length > 0) {
|
||||
let basketItem;
|
||||
for (let indexItemBasket = 0; indexItemBasket < items.length; indexItemBasket++) {
|
||||
basketItem = items[indexItemBasket];
|
||||
if (basketItem[keyQuantity] > 1) {
|
||||
elInput = basketContainer.find('form[' + attrFormType + '=' + typeFormBasketEdit + ']').find('input[type="number"]');
|
||||
// todo : what is missing?
|
||||
elInput.val(basketItem[keyQuantity]);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
hookupBasket();
|
||||
}
|
||||
|
||||
function getFormProductSelector(typeForm, elementInForm) {
|
||||
idPermutation = elementInForm.attr(attrIdPermutation);
|
||||
console.log('idPermutation: ', idPermutation);
|
||||
hasPermutation = !isEmpty(idPermutation);
|
||||
console.log('has permutation: ', hasPermutation);
|
||||
selectorIdPermutation = hasPermutation ? '[' + attrIdPermutation + '=' + idPermutation + ']' : '';
|
||||
return 'form[' + attrFormType + '="' + typeForm + '"][' + attrIdProduct + '=' + elementInForm.attr(attrIdProduct) + ']' + selectorIdPermutation;
|
||||
}
|
||||
|
||||
function hookupBtnsPlusMinus() {
|
||||
|
||||
// let elBtn, elInput, newVal, product;
|
||||
const minVal = 1;
|
||||
// Basket Add
|
||||
// Increment
|
||||
$('div.btn-increment[' + attrFormType + '=' + typeFormBasketAdd + ']').each(function() {
|
||||
let elBtn = $(this);
|
||||
initialiseEventHandler(elBtn, flagInitialised, function(){
|
||||
elBtn.on("click", function(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
let elInput = $(getFormProductSelector(typeFormBasketAdd, elBtn)).find('input[type="number"]');
|
||||
// console.log('input selector ='); console.log('form[' + attrFormType + '=' + elBtn.attr(attrFormType) + '][' + attrIdProduct + '=' + elBtn.attr(attrIdProduct) + ']');
|
||||
let newVal = parseInt(getElementCurrentValue(elInput));
|
||||
if (isNaN(newVal)) newVal = minVal;
|
||||
newVal += 1;
|
||||
elInput.val(newVal);
|
||||
});
|
||||
});
|
||||
});
|
||||
// Decrement
|
||||
$('div.btn-decrement[' + attrFormType + '=' + typeFormBasketAdd + ']').each(function() {
|
||||
let elBtn = $(this);
|
||||
initialiseEventHandler(elBtn, flagInitialised, function(){
|
||||
elBtn.on("click", function(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
// let product = $('.card.subcard[' + attrIdProduct +'=' + elBtn.attr(attrIdProduct) + ']');
|
||||
let elInput= $(getFormProductSelector(typeFormBasketAdd, elBtn)).find('input[type="number"]');
|
||||
let newVal = parseInt(getElementCurrentValue(elInput));
|
||||
if (isNaN(newVal)) newVal = minVal;
|
||||
newVal = Math.max(minVal, newVal - 1);
|
||||
elInput.val(newVal);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Basket Edit
|
||||
// Increment
|
||||
$('div.btn-increment[' + attrFormType + '=' + typeFormBasketEdit + ']').each(function() {
|
||||
let elBtn = $(this);
|
||||
initialiseEventHandler(elBtn, flagInitialised, function(){
|
||||
elBtn.on("click", function(event) {
|
||||
event.stopPropagation();
|
||||
// basketItem = $('.card.subcard[' + attrIdProduct +'=' + elBtn.attr(attrIdProduct) + ']');
|
||||
let elInput = $(getFormProductSelector(typeFormBasketEdit, elBtn)).find('input[type="number"]');
|
||||
// console.log('input selector ='); console.log('form[' + attrFormType + '=' + elBtn.attr(attrFormType) + '][' + attrIdProduct + '=' + elBtn.attr(attrIdProduct) + ']');
|
||||
let newVal = parseInt(getElementCurrentValue(elInput));
|
||||
if (isNaN(newVal)) newVal = minVal;
|
||||
newVal += 1;
|
||||
elInput.val(newVal);
|
||||
elInput.trigger("change");
|
||||
});
|
||||
});
|
||||
});
|
||||
// Decrement
|
||||
$('div.btn-decrement[' + attrFormType + '=' + typeFormBasketEdit + ']').each(function() {
|
||||
let elBtn = $(this);
|
||||
initialiseEventHandler(elBtn, flagInitialised, function(){
|
||||
elBtn.on("click", function(event) {
|
||||
event.stopPropagation();
|
||||
let elInput= $(getFormProductSelector(typeFormBasketEdit, elBtn)).find('input[type="number"]');
|
||||
let newVal = parseInt(getElementCurrentValue(elInput));
|
||||
if (isNaN(newVal)) newVal = minVal;
|
||||
newVal = Math.max(minVal, newVal - 1);
|
||||
elInput.val(newVal);
|
||||
elInput.trigger("change");
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function hookupBasketAddInputs() {
|
||||
|
||||
$('form[' + attrFormType + '=' + typeFormBasketAdd + ']').each(function() {
|
||||
let elForm = $(this);
|
||||
let elInput = elForm.find('input[type="number"]');
|
||||
initialiseEventHandler(elInput, flagInitialised, function(){
|
||||
elInput.on("change", function(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
});
|
||||
elInput.on("click", function(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function hookupBasketEditInputs() {
|
||||
|
||||
// let elBtn, elInput, newVal, product;
|
||||
const minVal = 1;
|
||||
// Basket Edit
|
||||
// Increment
|
||||
$('form[' + attrFormType + '=' + typeFormBasketEdit + ']').each(function() {
|
||||
let elForm = $(this);
|
||||
let elInput = elForm.find('input[type="number"]');
|
||||
initialiseEventHandler(elInput, flagInitialised, function(){
|
||||
elInput.on("change", function(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
// let lsPage = getPageLocalStorageCurrent();
|
||||
d = {};
|
||||
d[keyBasket]= getLocalStorage(keyBasket); // lsPage[keyBasket]; // JSON.parse(lsPage[keyBasket]);
|
||||
d[keyIdProduct] = elForm.attr(attrIdProduct); // lsPage[keyIdProduct];
|
||||
d[keyIdPermutation] = elForm.attr(attrIdPermutation);
|
||||
// d[keyQuantity] = lsPage[keyQuantity];
|
||||
d[keyForm] = convertForm2JSON(elForm);
|
||||
d[keyForm][keyQuantity] = elInput.val();
|
||||
console.log('sending data to basket edit controller: '); console.log(d);
|
||||
ajaxJSONData('basket update', mapHashToController(hashStoreBasketEdit), d, loadBasket, false);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function hookupBtnsDelete() {
|
||||
|
||||
console.log('hooking up basket item delete buttons');
|
||||
// let elForm, elDelete;
|
||||
// const minVal = 1;
|
||||
// Basket Add
|
||||
// Increment
|
||||
$('form[' + attrFormType + '=' + typeFormBasketEdit + ']').each(function() {
|
||||
let elForm = $(this);
|
||||
let elDelete = elForm.find('a.' + flagBasketItemDelete);
|
||||
initialiseEventHandler(elDelete, flagInitialised, function(){
|
||||
elDelete.on("click", function(event) {
|
||||
event.stopPropagation();
|
||||
ajaxData = {};
|
||||
ajaxData[keyBasket]= getLocalStorage(keyBasket);
|
||||
ajaxData[keyIdProduct] = elForm.attr(attrIdProduct);
|
||||
ajaxData[keyIdPermutation] = elForm.attr(attrIdPermutation);
|
||||
console.log('sending data to basket delete controller: '); console.log(ajaxData);
|
||||
ajaxJSONData('basket update', mapHashToController(hashStoreBasketDelete), ajaxData, loadBasket, false);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getCurrencySelected() {
|
||||
let elementSelectorCurrency = $(idSelectorCurrency);
|
||||
let selectedCurrency = elementSelectorCurrency.val();
|
||||
console.log("selected currency: ", selectedCurrency);
|
||||
return selectedCurrency;
|
||||
}
|
||||
|
||||
function addMetadataBasketToJSON(jsonData) {
|
||||
jsonData[keyIdCurrency] = getLocalStorage(keyIdCurrency);
|
||||
jsonData[keyIdRegionDelivery] = getLocalStorage(keyIdRegionDelivery);
|
||||
jsonData[keyIsIncludedVAT] = getLocalStorage(keyIsIncludedVAT);
|
||||
return jsonData;
|
||||
}
|
||||
1
static/js/stripe.js
Normal file
@@ -0,0 +1 @@
|
||||
var key_pub = 'pk_test_51OGrxlL7BuLKjoMpfpfw7bSmZZK1MhqMoQ5VhW2jUj7YtoEejO4vqnxKPiqTHHuh9U4qqkywbPCSI9TpFKtr4SYH007KHMWs68';
|
||||
21
static/python/rename_files.py
Normal file
@@ -0,0 +1,21 @@
|
||||
import os
|
||||
|
||||
dir_parent = os.path.abspath(__file__ + '/../..')
|
||||
dir_sql = os.path.abspath(dir_parent + '/sql')
|
||||
|
||||
|
||||
# METHODS
|
||||
for entry in os.scandir(dir_sql):
|
||||
if entry.is_file():
|
||||
if '_tbl_' in entry.name:
|
||||
|
||||
new_name = entry.name
|
||||
i_underscore = 6
|
||||
while i_underscore > 0:
|
||||
i_underscore = new_name.find('_', i_underscore + 1)
|
||||
new_name = new_name[:i_underscore + 1] + new_name[i_underscore + 1].upper() + new_name[i_underscore + 2:]
|
||||
os.rename(entry.path, dir_sql + '/' + new_name)
|
||||
if entry.is_dir():
|
||||
pass
|
||||
|
||||
# SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Msg_Error_Type';
|
||||
8395
static/sql/000_combine.sql
Normal file
141
static/sql/001_destroy.sql
Normal file
@@ -0,0 +1,141 @@
|
||||
|
||||
/* Clear Store DataBase */
|
||||
USE PARTS;
|
||||
|
||||
|
||||
# Drop dependencies
|
||||
DROP TABLE IF EXISTS Shop_User_Eval_Temp;
|
||||
DROP TABLE IF EXISTS tmp_Msg_Error;
|
||||
DROP TABLE IF EXISTS tmp_Currency;
|
||||
DROP TABLE IF EXISTS tmp_Delivery_Region;
|
||||
DROP TABLE IF EXISTS tmp_Region;
|
||||
DROP TABLE IF EXISTS tmp_Shop_User;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Order;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Product;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Product_p_Shop_User_Eval;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Image;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Variation;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Discount;
|
||||
DROP TABLE IF EXISTS tmp_Discount;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Category;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Product_Currency_Region_Link;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Product_Currency_Link;
|
||||
DROP TABLE IF EXISTS tmp_User_Role_Link;
|
||||
DROP TABLE IF EXISTS tmp_Shop_Basket;
|
||||
|
||||
|
||||
# Delete old tables
|
||||
DROP TABLE IF EXISTS Shop_User_Order_Product_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_User_Order_Product_Link;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_User_Order_Audit;
|
||||
DROP TABLE IF EXISTS Shop_User_Order;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_User_Order_Status_Audit;
|
||||
DROP TABLE IF EXISTS Shop_User_Order_Status;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_User_Basket_Audit;
|
||||
DROP TABLE IF EXISTS Shop_User_Basket;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Address_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Address;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_User_Role_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_User_Role_Link;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_User_Audit;
|
||||
DROP TABLE IF EXISTS Shop_User;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Role_Permission_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Role_Permission_Link;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Role_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Role;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Permission_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Permission;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Permission_Group_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Permission_Group;
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Discount_Region_Currency_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Discount_Region_Currency_Link;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Discount_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Discount;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Product_Delivery_Option_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Product_Delivery_Option_Link;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Delivery_Option_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Delivery_Option;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Image_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Image;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Image_Type_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Image_Type;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Product_Currency_Region_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Product_Currency_Region_Link;
|
||||
DROP TABLE IF EXISTS Shop_Product_Currency_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Product_Currency_Link;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Product_Variation_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Product_Variation_Link;
|
||||
DROP TABLE IF EXISTS Shop_Product_Permutation_Variation_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Product_Permutation_Variation_Link;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Product_Permutation_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Product_Permutation;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Variation_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Variation;
|
||||
DROP TABLE IF EXISTS Shop_Product_Variation_Type_Link_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Product_Variation_Type_Link;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Variation_Type_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Variation_Type;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Product_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Product;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Tax_Or_Surcharge_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Tax_Or_Surcharge;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Currency_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Currency;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Delivery_Region_Branch_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Delivery_Region_Branch;
|
||||
DROP TABLE IF EXISTS Shop_Region_Branch_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Region_Branch;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Delivery_Region_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Delivery_Region;
|
||||
DROP TABLE IF EXISTS Shop_Region_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Region;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Recurrence_Interval_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Recurrence_Interval;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Category_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Category;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_General_Audit;
|
||||
DROP TABLE IF EXISTS Shop_General;
|
||||
|
||||
DROP TABLE IF EXISTS File_Type_Audit;
|
||||
DROP TABLE IF EXISTS File_Type;
|
||||
|
||||
DROP TABLE IF EXISTS Msg_Error_Type;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Access_Level_Audit;
|
||||
DROP TABLE IF EXISTS Shop_Access_Level;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_User_Change_Set;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Msg_Error_Type;
|
||||
|
||||
DROP TABLE IF EXISTS Shop_Product_Change_Set;
|
||||
13
static/sql/100.0_tbl_Shop_Product_Change_Set.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
# Product Change Sets
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Change_Set';
|
||||
|
||||
CREATE TABLE Shop_Product_Change_Set (
|
||||
id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
comment VARCHAR(500),
|
||||
updated_last_on DATETIME,
|
||||
updated_last_by VARCHAR(100)
|
||||
);
|
||||
13
static/sql/100.1_tbl_Shop_User_Change_Set.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
# User Change Sets
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_User_Change_Set';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_User_Change_Set (
|
||||
id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
comment VARCHAR(500),
|
||||
updated_last_on DATETIME,
|
||||
updated_last_by VARCHAR(100)
|
||||
);
|
||||
21
static/sql/100.2_tbl_Shop_Access_Level.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
# Access Levels
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Access_Level';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Access_Level (
|
||||
id_access_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50),
|
||||
name VARCHAR(255),
|
||||
priority INT NOT NULL,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Access_Level_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/100.3_tbl_Shop_Access_Level_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Access Level Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Access_Level_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Access_Level_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_access_level INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Access_Level_Audit_id_access_level
|
||||
FOREIGN KEY (id_access_level)
|
||||
REFERENCES Shop_Access_Level(id_access_level)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Access_Level_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
);
|
||||
13
static/sql/100_tbl_Msg_Error_Type.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
# Error Message Type
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Msg_Error_Type';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Msg_Error_Type (
|
||||
id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50) NOT NULL,
|
||||
name VARCHAR(500) NOT NULL,
|
||||
description VARCHAR(1000)
|
||||
);
|
||||
17
static/sql/102_tbl_File_Type.sql
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
# File Types
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'File_Type';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS File_Type (
|
||||
id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50),
|
||||
name VARCHAR(100),
|
||||
extension VARCHAR(50),
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
updated_last_on DATETIME,
|
||||
updated_last_by VARCHAR(100)
|
||||
);
|
||||
22
static/sql/103_tbl_File_Type_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# File Type Audit
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'File_Type_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS File_Type_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_type INT NOT NULL,
|
||||
CONSTRAINT FK_File_Type_Audit_id_type
|
||||
FOREIGN KEY (id_type)
|
||||
REFERENCES File_Type(id_type)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
updated_last_on DATETIME,
|
||||
updated_last_by VARCHAR(100)
|
||||
);
|
||||
17
static/sql/104_tbl_Shop_General.sql
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
# Generic / shared properties
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_General';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_General (
|
||||
id_general INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
quantity_max FLOAT,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT CHK_Shop_General_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/105_tbl_Shop_General_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Shop General Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_General_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_General_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_general INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_General_Audit_id_general
|
||||
FOREIGN KEY (id_general)
|
||||
REFERENCES Shop_General(id_general)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_General_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
21
static/sql/106_tbl_Shop_Category.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
# Categories
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Category';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Category (
|
||||
id_category INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50),
|
||||
name VARCHAR(255),
|
||||
description VARCHAR(4000),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Category_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/107_tbl_Shop_Category_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Category Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Category_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Category_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_category INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Category_Audit_id_category
|
||||
FOREIGN KEY (id_category)
|
||||
REFERENCES Shop_Category(id_category)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Category_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
20
static/sql/108_tbl_Shop_Recurrence_Interval.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
# Recurrence Interval
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Recurrence_Interval';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Recurrence_Interval (
|
||||
id_interval INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50),
|
||||
name VARCHAR(255),
|
||||
name_plural VARCHAR(256),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Recurrence_Interval_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/109_tbl_Shop_Recurrence_Interval_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Recurrence Interval Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Recurrence_Interval_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Recurrence_Interval_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_interval INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Recurrence_Interval_Audit_id_interval
|
||||
FOREIGN KEY (id_interval)
|
||||
REFERENCES Shop_Recurrence_Interval(id_interval)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(256),
|
||||
value_new VARCHAR(256),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Recurrence_Interval_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
20
static/sql/110.0_tbl_Shop_Region.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
# Regions
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Region';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Region (
|
||||
id_region INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50) NOT NULL,
|
||||
name VARCHAR(200) NOT NULL,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Region_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/110.1_tbl_Shop_Region_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Region Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Region_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Region_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_region INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Region_Audit_id_region
|
||||
FOREIGN KEY (id_region)
|
||||
REFERENCES Shop_Region(id_region)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(64) NOT NULL,
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Region_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
29
static/sql/110.2_tbl_Shop_Region_Branch.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
# Region Branchs
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Region_Branch';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Region_Branch (
|
||||
id_branch INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_region_parent INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Region_Branch_id_region_parent
|
||||
FOREIGN KEY (id_region_parent)
|
||||
REFERENCES Shop_Region(id_region)
|
||||
ON UPDATE RESTRICT,
|
||||
id_region_child INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Region_Branch_id_region_child
|
||||
FOREIGN KEY (id_region_child)
|
||||
REFERENCES Shop_Region(id_region)
|
||||
ON UPDATE RESTRICT,
|
||||
-- depth INT NOT NULL,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Region_Branch_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/110.3_tbl_Shop_Region_Branch_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Region Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Region_Branch_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Region_Branch_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_branch INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Region_Branch_Audit_id_branch
|
||||
FOREIGN KEY (id_branch)
|
||||
REFERENCES Shop_Region_Branch(id_branch)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(64) NOT NULL,
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Region_Branch_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
23
static/sql/110.4_tbl_Shop_Currency.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
# Currencies
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Currency';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Currency (
|
||||
id_currency INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50) NOT NULL,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
symbol VARCHAR(1) NOT NULL,
|
||||
factor_from_GBP FLOAT NOT NULL,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Currency_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
23
static/sql/110.5_tbl_Shop_Currency_Audit.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
# Currency Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Currency_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Currency_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_currency INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Currency_Audit_id_currency
|
||||
FOREIGN KEY (id_currency)
|
||||
REFERENCES Shop_Currency(id_currency)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Currency_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
38
static/sql/110.6_tbl_Shop_Tax_Or_Surcharge.sql
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
# Taxes and Surcharges
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Tax_Or_Surcharge';
|
||||
|
||||
CREATE TABLE Shop_Tax_Or_Surcharge (
|
||||
id_tax INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50) NOT NULL,
|
||||
name VARCHAR(200) NOT NULL,
|
||||
id_region_buyer INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Tax_Or_Surcharge_id_region_buyer
|
||||
FOREIGN KEY (id_region_buyer)
|
||||
REFERENCES Shop_Region(id_region),
|
||||
id_region_seller INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Tax_Or_Surcharge_id_region_seller
|
||||
FOREIGN KEY (id_region_seller)
|
||||
REFERENCES Shop_Region(id_region),
|
||||
id_currency INT,
|
||||
CONSTRAINT FK_Shop_Tax_Or_Surcharge_id_currency
|
||||
FOREIGN KEY (id_currency)
|
||||
REFERENCES Shop_Currency(id_currency)
|
||||
ON UPDATE RESTRICT,
|
||||
fixed_fee FLOAT NOT NULL DEFAULT 0,
|
||||
multiplier FLOAT NOT NULL DEFAULT 1 CHECK (multiplier > 0),
|
||||
apply_fixed_fee_before_multiplier BIT DEFAULT 1,
|
||||
quantity_min FLOAT NOT NULL DEFAULT 0,
|
||||
quantity_max FLOAT NOT NULL,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Tax_Or_Surcharge_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
23
static/sql/110.7_tbl_Shop_Tax_Or_Surcharge_Audit.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
# Tax Or Surcharge Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Tax_Or_Surcharge_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Tax_Or_Surcharge_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_tax INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Tax_Or_Surcharge_Audit_id_discount
|
||||
FOREIGN KEY (id_tax)
|
||||
REFERENCES Shop_Tax_Or_Surcharge(id_tax)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Tax_Or_Surcharge_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
48
static/sql/110.8_tbl_Shop_Product.sql
Normal file
@@ -0,0 +1,48 @@
|
||||
|
||||
# Products
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product (
|
||||
id_product INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
-- description VARCHAR(4000),
|
||||
id_category INT NOT NULL,
|
||||
has_variations BIT NOT NULL,
|
||||
/*
|
||||
price_GBP_full FLOAT,
|
||||
price_GBP_min FLOAT,
|
||||
# ratio_discount_overall FLOAT NOT NULL DEFAULT 0,
|
||||
CONSTRAINT FK_Shop_Product_id_category
|
||||
FOREIGN KEY (id_category)
|
||||
REFERENCES Shop_Category(id_category)
|
||||
ON UPDATE RESTRICT,
|
||||
latency_manuf INT,
|
||||
quantity_min FLOAT,
|
||||
quantity_max FLOAT,
|
||||
quantity_step FLOAT,
|
||||
quantity_stock FLOAT,
|
||||
is_subscription BIT,
|
||||
id_recurrence_interval INT,
|
||||
CONSTRAINT FK_Shop_Product_id_recurrence_interval
|
||||
FOREIGN KEY (id_recurrence_interval)
|
||||
REFERENCES Shop_Recurrence_Interval(id_interval),
|
||||
count_recurrence_interval INT,
|
||||
*/
|
||||
id_access_level_required INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_id_access_level_required
|
||||
FOREIGN KEY (id_access_level_required)
|
||||
REFERENCES Shop_Access_Level(id_access_level),
|
||||
# id_stripe_product VARCHAR(100),
|
||||
# id_stripe_price VARCHAR(100) NOT NULL,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Product_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/110.9_tbl_Shop_Product_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Products
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_product INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Audit_id_product
|
||||
FOREIGN KEY (id_product)
|
||||
REFERENCES Shop_Product(id_product)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
21
static/sql/112_tbl_Shop_Variation_Type.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
# Variation Types
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Variation_Type';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Variation_Type (
|
||||
id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50),
|
||||
name VARCHAR(255),
|
||||
name_plural VARCHAR(256),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Variation_Type_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/113.0_tbl_Shop_Variation_Type_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Variation Type Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Variation_Type_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Variation_Type_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_type INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Variation_Type_Audit_id_type
|
||||
FOREIGN KEY (id_type)
|
||||
REFERENCES Shop_Variation_Type(id_type)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Variation_Type_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
25
static/sql/114_tbl_Shop_Variation.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
# Variations
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Variation';
|
||||
|
||||
CREATE TABLE Shop_Variation (
|
||||
id_variation INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_type INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Variation_id_type
|
||||
FOREIGN KEY (id_type)
|
||||
REFERENCES Shop_Variation_Type(id_type)
|
||||
ON UPDATE RESTRICT,
|
||||
code VARCHAR(50),
|
||||
name VARCHAR(255),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Variation_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/115_tbl_Shop_Variation_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Variation Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Variation_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Variation_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_variation INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Variation_Audit_id_variation
|
||||
FOREIGN KEY (id_variation)
|
||||
REFERENCES Shop_Variation(id_variation)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Variation_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
45
static/sql/117.1_tbl_Shop_Product_Permutation.sql
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
# Product Permutation
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Permutation';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Permutation (
|
||||
id_permutation INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_product INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Variation_Link_id_product
|
||||
FOREIGN KEY (id_product)
|
||||
REFERENCES Shop_Product(id_product)
|
||||
ON UPDATE RESTRICT,
|
||||
-- name VARCHAR(255) NOT NULL,
|
||||
description VARCHAR(4000) NOT NULL,
|
||||
cost_local_manufacturing FLOAT NOT NULL,
|
||||
id_currency_cost_manufacturing INT NOT NULL,
|
||||
profit_local_min FLOAT NOT NULL,
|
||||
id_currency_profit_min INT NOT NULL,
|
||||
latency_manufacture INT NOT NULL,
|
||||
quantity_min FLOAT NOT NULL,
|
||||
quantity_max FLOAT NOT NULL,
|
||||
quantity_step FLOAT NOT NULL,
|
||||
quantity_stock FLOAT NOT NULL,
|
||||
is_subscription BIT NOT NULL,
|
||||
id_recurrence_interval INT,
|
||||
CONSTRAINT FK_Shop_Product_Permutation_id_recurrence_interval
|
||||
FOREIGN KEY (id_recurrence_interval)
|
||||
REFERENCES Shop_Recurrence_Interval(id_interval),
|
||||
count_recurrence_interval INT,
|
||||
id_access_level_required INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Permutation_id_access_level_required
|
||||
FOREIGN KEY (id_access_level_required)
|
||||
REFERENCES Shop_Access_Level(id_access_level),
|
||||
id_stripe_product VARCHAR(100) NULL,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Product_Variation_Link_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
23
static/sql/117.2_tbl_Shop_Product_Permutation_Audit.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
# Product Permutation Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Permutation_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_permutation INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Permutation_Audit_id_permutation
|
||||
FOREIGN KEY (id_permutation)
|
||||
REFERENCES Shop_Product_Permutation(id_permutation)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Permutation_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
@@ -0,0 +1,28 @@
|
||||
|
||||
# Product Permutation Variation Link
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Permutation_Variation_Link';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Variation_Link (
|
||||
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_permutation INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Permutation_Variation_Link_id_permutation
|
||||
FOREIGN KEY (id_permutation)
|
||||
REFERENCES Shop_Product_Permutation(id_permutation)
|
||||
ON UPDATE RESTRICT,
|
||||
id_variation INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Permutation_Variation_Link_id_variation
|
||||
FOREIGN KEY (id_variation)
|
||||
REFERENCES Shop_Variation(id_variation)
|
||||
ON UPDATE RESTRICT,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Product_Permutation_Variation_Link_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
# Product Permutation Variation Link Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Permutation_Variation_Link_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Variation_Link_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_link INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Permutation_Variation_Link_Audit_id_link
|
||||
FOREIGN KEY (id_link)
|
||||
REFERENCES Shop_Product_Permutation_Variation_Link(id_link)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Permutation_Variation_Link_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
40
static/sql/117.5_tbl_Shop_Product_Currency_Link.sql
Normal file
@@ -0,0 +1,40 @@
|
||||
|
||||
# Product Currency link
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Currency_Link';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Currency_Link (
|
||||
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_product INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Link_id_product
|
||||
FOREIGN KEY (id_product)
|
||||
REFERENCES Shop_Product(id_product)
|
||||
ON UPDATE RESTRICT,
|
||||
id_permutation INT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Link_id_permutation
|
||||
FOREIGN KEY (id_permutation)
|
||||
REFERENCES Shop_Product_Permutation(id_permutation)
|
||||
ON UPDATE RESTRICT,
|
||||
id_currency INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Link_id_currency
|
||||
FOREIGN KEY (id_currency)
|
||||
REFERENCES Shop_Currency(id_currency)
|
||||
ON UPDATE RESTRICT,
|
||||
id_region_purchase INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Link_id_region_purchase
|
||||
FOREIGN KEY (id_region_purchase)
|
||||
REFERENCES Shop_Region(id_region)
|
||||
ON UPDATE RESTRICT,
|
||||
price_local_VAT_incl FLOAT NULL,
|
||||
price_local_VAT_excl FLOAT NULL,
|
||||
id_stripe_price VARCHAR(200),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Link_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
40
static/sql/117.5_tbl_Shop_Product_Currency_Region_Link.sql
Normal file
@@ -0,0 +1,40 @@
|
||||
|
||||
# Product Currency Region link
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Currency_Region_Link';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Currency_Region_Link (
|
||||
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_product INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Region_Link_id_product
|
||||
FOREIGN KEY (id_product)
|
||||
REFERENCES Shop_Product(id_product)
|
||||
ON UPDATE RESTRICT,
|
||||
id_permutation INT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Region_Link_id_permutation
|
||||
FOREIGN KEY (id_permutation)
|
||||
REFERENCES Shop_Product_Permutation(id_permutation)
|
||||
ON UPDATE RESTRICT,
|
||||
id_currency INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Region_Link_id_currency
|
||||
FOREIGN KEY (id_currency)
|
||||
REFERENCES Shop_Currency(id_currency)
|
||||
ON UPDATE RESTRICT,
|
||||
id_region_purchase INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Region_Link_id_region_purchase
|
||||
FOREIGN KEY (id_region_purchase)
|
||||
REFERENCES Shop_Region(id_region)
|
||||
ON UPDATE RESTRICT,
|
||||
price_local_VAT_incl FLOAT NULL,
|
||||
price_local_VAT_excl FLOAT NULL,
|
||||
id_stripe_price VARCHAR(200),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Region_Link_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/117.6_tbl_Shop_Product_Currency_Link_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Product Currency Link Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Currency_Link_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Currency_Link_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_link INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Link_Audit_id_link
|
||||
FOREIGN KEY (id_link)
|
||||
REFERENCES Shop_Product_Currency_Link(id_link)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Link_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
@@ -0,0 +1,22 @@
|
||||
|
||||
# Product Currency Region Link Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Currency_Region_Link_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Currency_Region_Link_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_link INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Region_Link_Audit_id_link
|
||||
FOREIGN KEY (id_link)
|
||||
REFERENCES Shop_Product_Currency_Region_Link(id_link)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Currency_Region_Link_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
21
static/sql/118_tbl_Shop_Image_Type.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
# Image Types
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Image_Type';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Image_Type (
|
||||
id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50),
|
||||
name VARCHAR(255),
|
||||
name_plural VARCHAR(256),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Image_Type_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/119_tbl_Shop_Image_Type_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Image Type Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Image_Type_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Image_Type_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_type INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Image_Type_Audit_id_type
|
||||
FOREIGN KEY (id_type)
|
||||
REFERENCES Shop_Image_Type(id_type)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Image_Type_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
35
static/sql/120_tbl_Shop_Image.sql
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
# Images
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Image';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Image (
|
||||
id_image INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_type_image INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Image_id_type_image
|
||||
FOREIGN KEY (id_type_image)
|
||||
REFERENCES Shop_Image_Type(id_type),
|
||||
id_type_file INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Image_id_type_file
|
||||
FOREIGN KEY (id_type_file)
|
||||
REFERENCES File_Type(id_type),
|
||||
id_product INT NULL,
|
||||
CONSTRAINT FK_Shop_Image_id_product
|
||||
FOREIGN KEY (id_product)
|
||||
REFERENCES Shop_Product(id_product),
|
||||
id_permutation INT NULL,
|
||||
CONSTRAINT FK_Shop_Image_id_permutation
|
||||
FOREIGN KEY (id_permutation)
|
||||
REFERENCES Shop_Product_Permutation(id_permutation),
|
||||
url VARCHAR(255),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Image_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
21
static/sql/121_tbl_Shop_Image_Audit.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
# Image Type Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Image_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Image_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_image INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Image_Audit_id_image
|
||||
FOREIGN KEY (id_image)
|
||||
REFERENCES Shop_Image(id_image),
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Image_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
25
static/sql/122_tbl_Shop_Delivery_Option.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
# Delivery Options
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Delivery_Option';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Delivery_Option (
|
||||
id_option INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50) NOT NULL,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
description VARCHAR(4000),
|
||||
latency_delivery_min INT NOT NULL,
|
||||
latency_delivery_max INT NOT NULL,
|
||||
quantity_min INT NOT NULL,
|
||||
quantity_max INT NOT NULL,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Delivery_Option_Type_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/123_tbl_Shop_Delivery_Option_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Delivery Option Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Delivery_Option_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Delivery_Option_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_option INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Delivery_Option_Audit_id_option
|
||||
FOREIGN KEY (id_option)
|
||||
REFERENCES Shop_Delivery_Option(id_option)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Delivery_Option_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
44
static/sql/124_tbl_Shop_Product_Delivery_Option_Link.sql
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
# Delivery Option
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Delivery_Option_Link';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Delivery_Option_Link (
|
||||
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_product INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Delivery_Option_Link_id_product
|
||||
FOREIGN KEY (id_product)
|
||||
REFERENCES Shop_Product(id_product)
|
||||
ON UPDATE RESTRICT,
|
||||
id_permutation INT,
|
||||
CONSTRAINT FK_Shop_Product_Delivery_Option_Link_id_permutation
|
||||
FOREIGN KEY (id_permutation)
|
||||
REFERENCES Shop_Product_Permutation(id_permutation)
|
||||
ON UPDATE RESTRICT,
|
||||
id_delivery_option INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Delivery_Option_Link_id_delivery_option
|
||||
FOREIGN KEY (id_delivery_option)
|
||||
REFERENCES Shop_Delivery_Option(id_option)
|
||||
ON UPDATE RESTRICT,
|
||||
id_region INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Delivery_Option_Link_id_region
|
||||
FOREIGN KEY (id_region)
|
||||
REFERENCES Shop_Region(id_region)
|
||||
ON UPDATE RESTRICT,
|
||||
id_currency INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Delivery_Option_Link_id_currency
|
||||
FOREIGN KEY (id_currency)
|
||||
REFERENCES Shop_Currency(id_currency)
|
||||
ON UPDATE RESTRICT,
|
||||
price_local FLOAT NOT NULL,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Product_Delivery_Option_Link_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
@@ -0,0 +1,22 @@
|
||||
|
||||
# Delivery Option Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Delivery_Option_Link_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Product_Delivery_Option_Link_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_link INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Delivery_Option_Link_Audit_id_link
|
||||
FOREIGN KEY (id_link)
|
||||
REFERENCES Shop_Product_Delivery_Option_Link(id_link)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(64) NOT NULL,
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Product_Delivery_Option_Link_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
48
static/sql/130.4_tbl_Shop_Discount.sql
Normal file
@@ -0,0 +1,48 @@
|
||||
|
||||
# Discounts
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Discount';
|
||||
|
||||
CREATE TABLE Shop_Discount (
|
||||
id_discount INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50) NOT NULL,
|
||||
name VARCHAR(200) NOT NULL,
|
||||
id_product INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Discount_id_product
|
||||
FOREIGN KEY (id_product)
|
||||
REFERENCES Shop_Product(id_product),
|
||||
id_permutation INT,
|
||||
CONSTRAINT FK_Shop_Discount_id_permutation
|
||||
FOREIGN KEY (id_permutation)
|
||||
REFERENCES Shop_Product_Permutation(id_permutation)
|
||||
ON UPDATE RESTRICT,
|
||||
/*
|
||||
id_delivery_region INT,
|
||||
CONSTRAINT FK_Shop_Discount_id_delivery_region
|
||||
FOREIGN KEY (id_delivery_region)
|
||||
REFERENCES Shop_Delivery_Region(id_region)
|
||||
ON UPDATE RESTRICT,
|
||||
id_currency INT,
|
||||
CONSTRAINT FK_Shop_Discount_id_currency
|
||||
FOREIGN KEY (id_currency)
|
||||
REFERENCES Shop_Currency(id_currency)
|
||||
ON UPDATE RESTRICT,
|
||||
*/
|
||||
multiplier FLOAT NOT NULL DEFAULT 1 CHECK (multiplier > 0),
|
||||
subtractor FLOAT NOT NULL DEFAULT 0,
|
||||
apply_multiplier_first BIT DEFAULT 1,
|
||||
quantity_min FLOAT NOT NULL DEFAULT 0,
|
||||
quantity_max FLOAT NOT NULL,
|
||||
date_start DATETIME NOT NULL,
|
||||
date_end DATETIME NOT NULL,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Discount_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
23
static/sql/131_tbl_Shop_Discount_Audit.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
# Discount Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Discount_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Discount_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_discount INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Discount_Audit_id_discount
|
||||
FOREIGN KEY (id_discount)
|
||||
REFERENCES Shop_Discount(id_discount)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Discount_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
32
static/sql/132_tbl_Shop_Discount_Region_Currency_Link.sql
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
# Discount Region Currency Link
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Discount_Region_Currency_Link';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Discount_Region_Currency_Link (
|
||||
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_discount INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Discount_Region_Currency_Link_id_discount
|
||||
FOREIGN KEY (id_discount)
|
||||
REFERENCES Shop_Discount(id_discount)
|
||||
ON UPDATE RESTRICT,
|
||||
id_region INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Discount_Region_Currency_Link_id_region
|
||||
FOREIGN KEY (id_region)
|
||||
REFERENCES Shop_Region(id_region)
|
||||
ON UPDATE RESTRICT,
|
||||
id_currency INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Discount_Region_Currency_Link_id_currency
|
||||
FOREIGN KEY (id_currency)
|
||||
REFERENCES Shop_Currency(id_currency)
|
||||
ON UPDATE RESTRICT,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Discount_Region_Currency_Link_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
);
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
# Discount Region Currency Link Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Discount_Region_Currency_Link_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Discount_Region_Currency_Link_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_link INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Discount_Region_Currency_Link_Audit_id_link
|
||||
FOREIGN KEY (id_link)
|
||||
REFERENCES Shop_Discount_Region_Currency_Link(id_link)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Discount_Region_Currency_Link_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_Product_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
21
static/sql/153_tbl_Shop_Permission_Group.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
# Permission Groups
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Permission_Group';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Permission_Group (
|
||||
id_group INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50),
|
||||
name VARCHAR(255),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Permission_Group_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
23
static/sql/154_tbl_Shop_Permission_Group_Audit.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
# Permission Group Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Permission_Group_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Permission_Group_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_group INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Permission_Group_Audit_id_group
|
||||
FOREIGN KEY (id_group)
|
||||
REFERENCES Shop_Permission_Group(id_group)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Permission_Group_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
29
static/sql/155_tbl_Shop_Permission.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
# Permissions
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Permission';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Permission (
|
||||
id_permission INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50),
|
||||
name VARCHAR(255),
|
||||
id_permission_group INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Permission_id_permission_group
|
||||
FOREIGN KEY (id_permission_group)
|
||||
REFERENCES Shop_Permission_Group(id_group)
|
||||
ON UPDATE RESTRICT,
|
||||
id_access_level_required INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Permission_id_access_level_required
|
||||
FOREIGN KEY (id_access_level_required)
|
||||
REFERENCES Shop_Access_Level(id_access_level),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Permission_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
);
|
||||
23
static/sql/156_tbl_Shop_Permission_Audit.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
# Permission Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Permission_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Permission_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_permission INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Permission_Audit_id_permission
|
||||
FOREIGN KEY (id_permission)
|
||||
REFERENCES Shop_Permission(id_permission)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Permission_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
20
static/sql/157_tbl_Shop_Role.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
# Roles
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Role';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Role (
|
||||
id_role INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(50),
|
||||
name VARCHAR(255),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
display_order INT NOT NULL,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Role_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
);
|
||||
23
static/sql/158_tbl_Shop_Role_Audit.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
# Role Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Role_Audit';
|
||||
|
||||
CREATE TABLE Shop_Role_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_role INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Role_Audit_id_role
|
||||
FOREIGN KEY (id_role)
|
||||
REFERENCES Shop_Role(id_role)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Role_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
ON UPDATE RESTRICT
|
||||
);
|
||||
31
static/sql/159_tbl_Shop_Role_Permission_Link.sql
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
# Role Permission link
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Role_Permission_Link';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Role_Permission_Link (
|
||||
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_role INT,
|
||||
CONSTRAINT FK_Shop_Role_Permission_Link_id_role
|
||||
FOREIGN KEY (id_role)
|
||||
REFERENCES Shop_Role(id_role)
|
||||
ON UPDATE RESTRICT,
|
||||
id_permission INT,
|
||||
CONSTRAINT FK_Shop_Role_Permission_Link_id_permission
|
||||
FOREIGN KEY (id_permission)
|
||||
REFERENCES Shop_Permission(id_permission)
|
||||
ON UPDATE RESTRICT,
|
||||
id_access_level INT,
|
||||
CONSTRAINT FK_Shop_Role_Permission_Link_id_access_level
|
||||
FOREIGN KEY (id_access_level)
|
||||
REFERENCES Shop_Access_Level(id_access_level),
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_Role_Permission_Link_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
);
|
||||
22
static/sql/160_tbl_Shop_Role_Permission_Link_Audit.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
# Role Permission link Audits
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Role_Permission_Link_Audit';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_Role_Permission_Link_Audit (
|
||||
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
id_link INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Role_Permission_Link_Audit_id_link
|
||||
FOREIGN KEY (id_link)
|
||||
REFERENCES Shop_Role_Permission_Link(id_link)
|
||||
ON UPDATE RESTRICT,
|
||||
name_field VARCHAR(50),
|
||||
value_prev VARCHAR(500),
|
||||
value_new VARCHAR(500),
|
||||
id_change_set INT NOT NULL,
|
||||
CONSTRAINT FK_Shop_Role_Permission_Link_Audit_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
);
|
||||
21
static/sql/161_tbl_Shop_User.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
# Users
|
||||
|
||||
USE PARTS;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_User';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Shop_User (
|
||||
id_user VARCHAR(200) NOT NULL PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
email VARCHAR(254) NOT NULL,
|
||||
email_verified BIT NOT NULL DEFAULT 0,
|
||||
is_super_user BIT NOT NULL DEFAULT 0,
|
||||
active BIT NOT NULL DEFAULT 1,
|
||||
created_on DATETIME,
|
||||
created_by VARCHAR(100),
|
||||
id_change_set INT,
|
||||
CONSTRAINT FK_Shop_User_id_change_set
|
||||
FOREIGN KEY (id_change_set)
|
||||
REFERENCES Shop_User_Change_Set(id_change_set)
|
||||
);
|
||||