Jump to:
47 |-
48 | {% for variation in variations %}
49 |
- 50 | 51 | {{ variation }} 52 | 53 | {% endfor %} 54 |
├── .dockerignore
├── config
├── search
│ ├── wordforms.txt
│ └── sphinx.conf
├── php-fpm-log.conf
└── php-fpm-extra.conf
├── ui
├── pos
│ ├── print
│ │ ├── return-policy.html
│ │ └── inventory.html
│ ├── report
│ │ ├── kit-items.html
│ │ ├── backordered-items.html
│ │ ├── empty-products.html
│ │ ├── dogs.html
│ │ ├── inventory-by-brand.html
│ │ ├── shipments.html
│ │ ├── inventory-value.html
│ │ └── drop-by-drop.html
│ ├── layout
│ │ ├── print.css
│ │ ├── dialog.html
│ │ └── print.html
│ ├── email
│ │ ├── invoice.html
│ │ ├── gift-card.html
│ │ ├── abandoned-cart.html
│ │ ├── delivery.html
│ │ ├── out_for_delivery.html
│ │ └── available_for_pickup.html
│ ├── 404.html
│ ├── ad.twig
│ ├── push
│ │ └── service-worker.js
│ ├── catalog
│ │ ├── whatsnew.html
│ │ └── products.twig
│ ├── settings
│ │ ├── nav.twig
│ │ ├── shipping.html
│ │ ├── wordforms.html
│ │ └── messages.html
│ ├── dialog
│ │ ├── file-upload.html
│ │ ├── item-shipping-estimates.html
│ │ ├── pay-discount.html
│ │ ├── report-quick.html
│ │ ├── pay-other.html
│ │ ├── pay-cash.html
│ │ ├── wordform.html
│ │ ├── item-google-history.html
│ │ ├── punch.html
│ │ ├── tracker.html
│ │ ├── dropship.html
│ │ ├── person-loyalty.html
│ │ └── email-gift-card.html
│ ├── person
│ │ ├── searchform.twig
│ │ ├── backorders.html
│ │ └── index.html
│ ├── gift-card
│ │ └── index.html
│ ├── shipping
│ │ └── shipment.html
│ └── quickbooks
│ │ └── accounts.html
├── shared
│ └── logo.png
└── web
│ ├── robots.txt
│ ├── layout
│ ├── tracking-body.twig
│ ├── userway.twig
│ ├── tracking.twig
│ ├── newsletter.twig
│ └── google-rating.twig
│ ├── catalog
│ ├── sitemap.xml
│ ├── whatsnew.html
│ ├── searchresults.html
│ ├── product.twig
│ └── brand.html
│ ├── email
│ ├── login-link.html
│ ├── get-help.html
│ └── contact.html
│ ├── cart
│ ├── backorder-warning.twig
│ ├── add-to-cart-dialog.html
│ └── get-help.html
│ ├── sitemap.xml
│ ├── backroom
│ └── ads.html
│ ├── sale
│ └── sale.html
│ ├── 404.html
│ ├── paymarks
│ ├── cc-visa.svg
│ ├── cc-discover.svg
│ └── cc-paypal.svg
│ ├── ad.twig
│ ├── index.html
│ ├── edit.html
│ └── wishlist
│ └── shared.html
├── lib
├── Scat
│ ├── Model
│ │ ├── Page.php
│ │ ├── CcTrace.php
│ │ ├── Config.php
│ │ ├── Signup.php
│ │ ├── AuthToken.php
│ │ ├── Redirect.php
│ │ ├── Wordform.php
│ │ ├── CannedMessage.php
│ │ ├── ImageItem.php
│ │ ├── ImageProduct.php
│ │ ├── InternalAdProduct.php
│ │ ├── InternalAdDepartment.php
│ │ ├── Brand.php
│ │ ├── LoyaltyReward.php
│ │ ├── TimeclockAudit.php
│ │ ├── Loyalty.php
│ │ ├── KitItem.php
│ │ ├── Timeclock.php
│ │ ├── Shipment.php
│ │ ├── Wishlist.php
│ │ ├── Device.php
│ │ ├── WebPushSubscription.php
│ │ ├── Note.php
│ │ ├── InternalAd.php
│ │ ├── Address.php
│ │ ├── VendorItem.php
│ │ └── PriceOverride.php
│ ├── Exception
│ │ ├── HttpConflictException.php
│ │ └── FileUploadException.php
│ ├── Middleware
│ │ ├── NoCache.php
│ │ └── NoIndex.php
│ ├── Controller
│ │ └── Scale.php
│ ├── Service
│ │ ├── PoleDisplay.php
│ │ ├── Fraud.php
│ │ ├── Config.php
│ │ ├── Giftcard.php
│ │ ├── Cart.php
│ │ ├── Dejavoo.php
│ │ └── Newsletter.php
│ ├── Distance.php
│ ├── Search
│ │ └── Lexer.php
│ └── JsonErrorRenderer.php
├── dummy-fraud-checker.php
├── dummy-cc-terminal.php
└── fraud-checker.phpc
├── static
├── icon.iconset
│ ├── icon_16x16.png
│ ├── icon_32x32.png
│ ├── icon_128x128.png
│ ├── icon_16x16@2x.png
│ ├── icon_256x256.png
│ ├── icon_32x32@2x.png
│ ├── icon_512x512.png
│ ├── icon_128x128@2x.png
│ └── icon_256x256@2x.png
├── limited-quantity-label.png
├── css
│ └── bootstrap-icons-1.8.2
│ │ └── fonts
│ │ ├── bootstrap-icons.woff
│ │ └── bootstrap-icons.woff2
├── limited-quantity.svg
├── js
│ └── dummy-zaraz.js
├── error.html
└── sitemap-pages.xml
├── .gitignore
├── sample.env
├── .gitattributes
├── extern
├── x-editable-1.5.1
│ ├── bootstrap3-editable
│ │ └── img
│ │ │ ├── clear.png
│ │ │ └── loading.gif
│ ├── inputs-ext
│ │ ├── address
│ │ │ └── address.css
│ │ ├── wysihtml5
│ │ │ └── bootstrap-wysihtml5-0.0.2
│ │ │ │ └── wysiwyg-color.css
│ │ └── typeaheadjs
│ │ │ └── lib
│ │ │ └── typeahead.js-bootstrap.css
│ └── LICENSE-MIT
├── mousetrap-1.6.2
│ └── plugins
│ │ └── global-bind
│ │ ├── mousetrap-global-bind.min.js
│ │ └── README.md
└── select2-bootstrap-theme-0.1.0-beta.10
│ └── LICENSE
├── db
├── init
│ └── 001-init.sh
├── migrations
│ ├── 20190526003715_remove_txn_note.php
│ ├── 20200416210541_fix_item_brand.php
│ ├── 20200416211304_fix_payment_txn.php
│ ├── 20191116175729_longer_image_uuid.php
│ ├── 20211002194125_fix_timeclock_audit_entry.php
│ ├── 20200417043645_add_brand_fulltext_index.php
│ ├── 20200927224555_add_image_fulltext_index.php
│ ├── 20220526184322_remove_item_drophip_fee.php
│ ├── 20200416221719_fix_txn_line_foreign_keys.php
│ ├── 20200417001852_fix_txn_foreign_keys.php
│ ├── 20211202195401_make_vendor_item_vendor_sku_unique_key.php
│ ├── 20200416214009_fix_vendor_item_foreign_keys.php
│ ├── 20200517042944_fix_shipment_id_fields.php
│ ├── 20200527203740_add_media_b2_file_id.php
│ ├── 20200510002927_add_txn_online_sale_id.php
│ ├── 20230606201015_add_internal_ad_fulltext_index.php
│ ├── 20210924183832_fix_shipment_handling_instructions.php
│ ├── 20210924174456_add_shipment_ship_district_method.php
│ ├── 20210924175202_add_shipment_handling_instructions.php
│ ├── 20200512182114_add_timezone_to_address.php
│ ├── 20200516014830_add_payment_data.php
│ ├── 20220121182700_add_cc_to_person.php
│ ├── 20200501033926_add_note_type.php
│ ├── 20201005213557_add_kit_quantity.php
│ ├── 20210927172226_add_note_full_content.php
│ ├── 20231010222501_add_expires_at_to_internal_ad.php
│ ├── 20200409223318_default_tax_rate.php
│ ├── 20210210003751_add_tax_exemption_to_person.php
│ ├── 20210925173629_add_person_gift_card.php
│ ├── 20191120204658_add_brand_description.php
│ ├── 20200502225317_add_image_publitio_id.php
│ ├── 20210306183903_add_no_backorder_to_item.php
│ ├── 20220108014155_add_salsify_to_person.php
│ ├── 20200830005627_add_shipping_method.php
│ ├── 20210207234729_add_txn_line_returned_from_id.php
│ ├── 20200110001431_add_address_to_txn.php
│ ├── 20200208201034_add_qb_ids.php
│ ├── 20220524195406_add_captured_to_payment.php
│ ├── 20210307221349_add_warning_to_brand.php
│ ├── 20200125194502_add_config_table.php
│ ├── 20200429051210_config_type_password.php
│ ├── 20221118191824_add_item_no_online_sale.php
│ ├── 20191104010342_add_price_override_in_stock.php
│ ├── 20200209003421_fix_qb_je_id.php
│ ├── 20200406234429_fix_timeclock_person.php
│ ├── 20211109210154_add_item_dropship_fee.php
│ ├── 20210207215627_add_tax_captured_to_txn.php
│ ├── 20220816201340_add_item_description.php
│ ├── 20221005183725_add_packaged_for_shipping_to_item.php
│ ├── 20230916233339_add_image_use_as_swatch.php
│ ├── 20211020024653_add_product_importance.php
│ ├── 20220611214355_add_featured_to_department.php
│ ├── 20200501232539_add_image_caption_and_data.php
│ ├── 20200517011542_add_shipment_status_pending.php
│ ├── 20210624190738_add_shipping_cancelling_state.php
│ ├── 20200523233953_create_item_to_image.php
│ ├── 20190602205056_add_image_times.php
│ ├── 20200505180239_add_venmo_pay_method.php
│ ├── 20200415005639_add_barcode_id.php
│ ├── 20210115220541_add_postmates_pay_method.php
│ ├── 20200416204639_barcode_item_id_and_dates.php
│ ├── 20200720190934_add_more_txn_status.php
│ ├── 20220803231224_add_google_product_categories.php
│ ├── 20200206191248_add_device_table.php
│ ├── 20191114022946_add_eventbrite_pay_method.php
│ ├── 20200927005057_add_rewards_payment_type.php
│ ├── 20200428205907_add_config_type.php
│ ├── 20210923174040_add_address_lat_long_verified.php
│ ├── 20230925230029_add_web_push_notications.php
│ ├── 20220621190107_add_image_id_indexes.php
│ ├── 20200506191152_add_shipments_table.php
│ ├── 20191210235333_add_active_default.php
│ ├── 20200508230440_add_txn_status.php
│ ├── 20200824230213_add_canned_emails.php
│ ├── 20200411021256_add_giftcard_times.php
│ ├── 20190525204400_initial_functions.php
│ ├── 20200430172852_add_person_rewards_plus_newsletter.php
│ ├── 20191210233744_add_brand_department_active_and_times.php
│ ├── 20201005192908_add_kits.php
│ └── 20200110000112_add_address_table.php
└── seeds
│ └── DemoSeeder.php
├── phpstan.neon
├── bin
├── count-loc
├── export-sql-structure
├── encrypt-code
└── decrypt-code
├── phinx.yml
├── deploy.php
├── LICENSE
├── docker-compose.yml
├── Dockerfile
└── README.md
/.dockerignore:
--------------------------------------------------------------------------------
1 | scratch
2 |
--------------------------------------------------------------------------------
/config/search/wordforms.txt:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ui/pos/print/return-policy.html:
--------------------------------------------------------------------------------
1 | All sales are final as of November 3, 2023.
2 |
--------------------------------------------------------------------------------
/ui/shared/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jimwins/scat/HEAD/ui/shared/logo.png
--------------------------------------------------------------------------------
/lib/Scat/Model/Page.php:
--------------------------------------------------------------------------------
1 | has_many('Product');
7 | }
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/lib/Scat/Model/LoyaltyReward.php:
--------------------------------------------------------------------------------
1 | belongs_to('Item')->find_one();
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/db/init/001-init.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | mysqladmin -uroot -p${MYSQL_ROOT_PASSWORD} create scat
4 | mysql -uroot -p${MYSQL_ROOT_PASSWORD} \
5 | -e "GRANT ALL PRIVILEGES ON scat.* TO '${MYSQL_USER}'@'%';"
6 |
--------------------------------------------------------------------------------
/extern/x-editable-1.5.1/inputs-ext/address/address.css:
--------------------------------------------------------------------------------
1 | .editable-address {
2 | display: block;
3 | margin-bottom: 5px;
4 | }
5 |
6 | .editable-address span {
7 | width: 70px;
8 | display: inline-block;
9 | }
--------------------------------------------------------------------------------
/lib/Scat/Model/TimeclockAudit.php:
--------------------------------------------------------------------------------
1 | belongs_to('Timeclock')->find_one();
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/phpstan.neon:
--------------------------------------------------------------------------------
1 | parameters:
2 | bootstrapFiles:
3 | - lib/dummy-cc-terminal.php
4 | - lib/dummy-fraud-checker.php
5 | universalObjectCratesClasses:
6 | - Scat\Model
7 | level: 1
8 | paths:
9 | - app
10 | - lib
11 |
--------------------------------------------------------------------------------
/lib/dummy-fraud-checker.php:
--------------------------------------------------------------------------------
1 |
4 | {% endif %}
5 |
6 |
--------------------------------------------------------------------------------
/lib/Scat/Model/Loyalty.php:
--------------------------------------------------------------------------------
1 | belongs_to('Person');
7 | }
8 | public function txn() {
9 | return $this->belongs_to('Txn');
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/lib/Scat/Model/KitItem.php:
--------------------------------------------------------------------------------
1 | belongs_to('Item', 'kit_id')->find_one();
7 | }
8 |
9 | public function item() {
10 | return $this->belongs_to('Item')->find_one();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/Scat/Model/Timeclock.php:
--------------------------------------------------------------------------------
1 | belongs_to('Person')->find_one();
7 | }
8 |
9 | public function changes() {
10 | return $this->has_many('TimeclockAudit')->find_many();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/config/php-fpm-extra.conf:
--------------------------------------------------------------------------------
1 | [global]
2 | ;access.format = "%{%FT%T%z}t %{REMOTE_ADDR}e %m %{REQUEST_URI_PATH}e %s %{mili}d"
3 |
4 | [www]
5 | catch_workers_output = On
6 | decorate_workers_output = On
7 | chdir = /app
8 | php_admin_value[upload_max_filesize] = 100M
9 | php_admin_value[post_max_size] = 100M
10 | ping.path = /ping
11 |
--------------------------------------------------------------------------------
/lib/Scat/Model/Shipment.php:
--------------------------------------------------------------------------------
1 | belongs_to('Txn')->find_one();
7 | }
8 |
9 | public function dimensions() {
10 | return "{$this->length}x{$this->width}x{$this->height}";
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/bin/count-loc:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | dirs="$@"
4 | if [ -z "$dirs" ]; then
5 | dirs="app css db js lib static ui"
6 | fi
7 |
8 | find $dirs \
9 | -type f \
10 | -not -name '*.png' \
11 | -not -name '*.svg' \
12 | -not -path '*bootstrap-icons*' \
13 | -not -name 'normalize.css' \
14 | -not -name 'jquery*' \
15 | | xargs wc -l
16 |
--------------------------------------------------------------------------------
/db/migrations/20190526003715_remove_txn_note.php:
--------------------------------------------------------------------------------
1 | table('txn_note')->drop()->save();
10 | }
11 |
12 | // No down() since we never really want to recreate txn_note
13 | }
14 |
--------------------------------------------------------------------------------
/extern/mousetrap-1.6.2/plugins/global-bind/mousetrap-global-bind.min.js:
--------------------------------------------------------------------------------
1 | (function(a){var c={},d=a.prototype.stopCallback;a.prototype.stopCallback=function(e,b,a,f){return this.paused?!0:c[a]||c[f]?!1:d.call(this,e,b,a)};a.prototype.bindGlobal=function(a,b,d){this.bind(a,b,d);if(a instanceof Array)for(b=0;b An error occured. Something obviously went wrong. Here is a link to log in to your account on our website:
9 | {{ txn.name }} <{{ txn.email }}> requested help with their cart.
10 |
14 | {{ txn.name }} said:
15 | {{ ad.caption }} Hi,
15 | You've been sent a gift card for Raw Materials Art Supplies
16 | {{- from_name ? (' from ' ~ from_name) }}. The PDF is attached, just print
17 | it out and bring it to the store (or show us the card on your phone).
18 | We were asked to pass along this message with the card:
24 | {{ comment }}
17 | {% endif %}
18 | {% endblock %}
19 |
20 | {% block content_bottom %}
21 | {% endblock %}
22 |
--------------------------------------------------------------------------------
/lib/dummy-cc-terminal.php:
--------------------------------------------------------------------------------
1 | table('shipment', [ 'signed' => false ]);
10 | $table
11 | ->changeColumn('handling_instructions', 'string', [
12 | 'limit' => 255,
13 | 'null' => true
14 | ])
15 | ->update();
16 |
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/db/migrations/20210924174456_add_shipment_ship_district_method.php:
--------------------------------------------------------------------------------
1 | table('shipment', [ 'signed' => false ]);
10 | $table
11 | ->changeColumn('method', 'enum', [
12 | 'values' => [
13 | 'easypost', 'shipdistrict'
14 | ],
15 | ])
16 | ->update();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/db/migrations/20210924175202_add_shipment_handling_instructions.php:
--------------------------------------------------------------------------------
1 | table('shipment', [ 'signed' => false ]);
10 | $table
11 | ->addColumn('handling_instructions', 'string', [
12 | 'limit' => 255,
13 | 'after' => 'insurance'
14 | ])
15 | ->update();
16 |
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/db/migrations/20200512182114_add_timezone_to_address.php:
--------------------------------------------------------------------------------
1 | table('address');
10 | $table
11 | ->addColumn('timezone', 'string', [
12 | 'limit' => 128,
13 | 'null' => true,
14 | 'default' => null,
15 | 'after' => 'phone',
16 | ])
17 | ->save();
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/db/migrations/20200516014830_add_payment_data.php:
--------------------------------------------------------------------------------
1 | table('payment');
11 | $table
12 | ->addColumn('data', 'blob', [
13 | 'limit' => MysqlAdapter::BLOB_MEDIUM,
14 | 'null' => true,
15 | ])
16 | ->save();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/db/migrations/20220121182700_add_cc_to_person.php:
--------------------------------------------------------------------------------
1 | table('person');
10 | $table
11 | ->addColumn('cc_email', 'string', [
12 | 'limit' => 255,
13 | 'null' => true,
14 | 'after' => 'salsify_url',
15 | ])
16 | ->update();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/db/migrations/20200501033926_add_note_type.php:
--------------------------------------------------------------------------------
1 | table('note');
10 | $table
11 | ->addColumn('source', 'enum', [
12 | 'values' => [ 'internal', 'sms', 'email' ],
13 | 'default' => 'internal',
14 | 'null' => true,
15 | 'after' => 'attach_id',
16 | ])
17 | ->save();
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/db/migrations/20201005213557_add_kit_quantity.php:
--------------------------------------------------------------------------------
1 | table('kit_item', [ 'signed' => false ]);
10 | $table
11 | ->addColumn('quantity', 'integer', [
12 | 'after' => 'item_id',
13 | 'signed' => false,
14 | 'null' => false,
15 | 'default' => 1,
16 | ])
17 | ->save();
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/db/migrations/20210927172226_add_note_full_content.php:
--------------------------------------------------------------------------------
1 | table('note');
11 | $table
12 | ->addColumn('full_content', 'text', [
13 | 'limit' => MysqlAdapter::TEXT_MEDIUM,
14 | 'null' => true,
15 | 'after' => 'content',
16 | ])
17 | ->update();
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/db/migrations/20231010222501_add_expires_at_to_internal_ad.php:
--------------------------------------------------------------------------------
1 | table('internal_ad', [ 'signed' => false ]);
11 | $table
12 | ->addColumn('expires_at', 'datetime', [
13 | 'null' => true,
14 | 'after' => 'button_label',
15 | ])
16 | ->update();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/phinx.yml:
--------------------------------------------------------------------------------
1 | paths:
2 | migrations: '%%PHINX_CONFIG_DIR%%/db/migrations'
3 | seeds: '%%PHINX_CONFIG_DIR%%/db/seeds'
4 |
5 | environments:
6 | default_migration_table: phinxlog
7 | default_database: db
8 |
9 | db:
10 | adapter: mysql
11 | host: '%%PHINX_HOST_NAME%%'
12 | name: '%%PHINX_DATABASE%%'
13 | user: '%%PHINX_USER%%'
14 | pass: '%%PHINX_PASSWORD%%'
15 | port: 3306
16 | charset: utf8mb4
17 | collation: utf8mb4_0900_ai_ci
18 |
19 | version_order: creation
20 |
--------------------------------------------------------------------------------
/db/migrations/20200409223318_default_tax_rate.php:
--------------------------------------------------------------------------------
1 | table('txn', [ 'signed' => false ]);
10 | $table
11 | ->changeColumn('tax_rate', 'decimal', [
12 | 'precision' => 9,
13 | 'scale' => 3,
14 | 'default' => 0.0,
15 | ])
16 | ->save();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ui/web/layout/newsletter.twig:
--------------------------------------------------------------------------------
1 | {% if config('mailerlite.account_id') %}
2 |
3 |
10 |
11 | {% endif %}
12 |
--------------------------------------------------------------------------------
/db/migrations/20210210003751_add_tax_exemption_to_person.php:
--------------------------------------------------------------------------------
1 | table('person');
10 | $table
11 | ->addColumn('exemption_certificate_id', 'string', [
12 | 'null' => true,
13 | 'limit' => 50,
14 | 'after' => 'tax_id',
15 | ])
16 | ->save();
17 |
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/db/migrations/20210925173629_add_person_gift_card.php:
--------------------------------------------------------------------------------
1 | table('person', [ 'signed' => false ]);
11 | $table
12 | ->addColumn('giftcard_id', 'integer', [
13 | 'signed' => false,
14 | 'null' => true,
15 | 'after' => 'vendor_rebate',
16 | ])
17 | ->update();
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/db/migrations/20191120204658_add_brand_description.php:
--------------------------------------------------------------------------------
1 | table('brand', [ 'signed' => false ]);
11 | $table
12 | ->addColumn('description', 'text', [
13 | 'limit' => MysqlAdapter::TEXT_MEDIUM,
14 | 'null' => true,
15 | ])
16 | ->update();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/db/migrations/20200502225317_add_image_publitio_id.php:
--------------------------------------------------------------------------------
1 | table('image');
10 | $table
11 | ->addColumn('publitio_id', 'string', [
12 | 'limit' => 12,
13 | 'default' => '',
14 | 'null' => true,
15 | 'after' => 'uuid',
16 | ])
17 | ->save();
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/db/migrations/20210306183903_add_no_backorder_to_item.php:
--------------------------------------------------------------------------------
1 | table('item', [ 'signed' => false ]);
11 | $table
12 | ->addColumn('no_backorder', 'integer', [
13 | 'limit' => MysqlAdapter::INT_TINY,
14 | 'null' => true
15 | ])
16 | ->update();
17 |
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/ui/pos/ad.twig:
--------------------------------------------------------------------------------
1 |
4 | {{ ad.tag }}
5 |
6 | {% endif %}
7 |
8 | {{ ad.headline }}
9 |
10 |
11 | {{ include('carousel.twig', { images: [ ad.image ]}) }}
12 |
13 | {% if ad.caption %}
14 | What's New
21 |
22 | {% if products %}
23 | {% include 'catalog/products.twig' %}
24 | {% endif %}
25 |
26 | {% endblock %}
27 |
--------------------------------------------------------------------------------
/db/migrations/20200406234429_fix_timeclock_person.php:
--------------------------------------------------------------------------------
1 | table('timeclock', [ 'signed' => false ]);
11 | $table
12 | ->renameColumn('person', 'person_id')
13 | ->save();
14 | }
15 |
16 | public function down()
17 | {
18 | $table= $this->table('timeclock', [ 'signed' => false ]);
19 | $table
20 | ->renameColumn('person_id', 'person')
21 | ->save();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/db/migrations/20211109210154_add_item_dropship_fee.php:
--------------------------------------------------------------------------------
1 | table('item', [ 'signed' => false ]);
11 | $table
12 | ->addColumn('dropship_fee', 'decimal', [
13 | 'precision' => 9,
14 | 'scale' => 2,
15 | 'null' => true,
16 | 'after' => 'no_backorder'
17 | ])
18 | ->update();
19 |
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/db/migrations/20210207215627_add_tax_captured_to_txn.php:
--------------------------------------------------------------------------------
1 | table('txn');
10 | $table
11 | ->addColumn('tax_captured', 'datetime', [
12 | 'null' => true,
13 | 'after' => 'paid',
14 | ])
15 | ->save();
16 |
17 | $this->execute("UPDATE txn SET tax_captured = paid
18 | WHERE type = 'customer'
19 | AND (paid < '2021-01-01' OR online_sale_id)");
20 |
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/db/migrations/20220816201340_add_item_description.php:
--------------------------------------------------------------------------------
1 | table('item', [ 'signed' => false ]);
12 | $table
13 | ->addColumn('description', 'text', [
14 | 'limit' => MysqlAdapter::TEXT_MEDIUM,
15 | 'null' => true,
16 | 'after' => 'name',
17 | ])
18 | ->update();
19 |
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/extern/mousetrap-1.6.2/plugins/global-bind/README.md:
--------------------------------------------------------------------------------
1 | # Global Bind
2 |
3 | This extension allows you to specify keyboard events that will work anywhere including inside textarea/input fields.
4 |
5 | Usage looks like:
6 |
7 | ```javascript
8 | Mousetrap.bindGlobal('ctrl+s', function() {
9 | _save();
10 | });
11 | ```
12 |
13 | This means that a keyboard event bound using ``Mousetrap.bind`` will only work outside of form input fields, but using ``Moustrap.bindGlobal`` will work in both places.
14 |
15 | If you wanted to create keyboard shortcuts that only work when you are inside a specific textarea you can do that too by creating your own extension.
16 |
--------------------------------------------------------------------------------
/static/limited-quantity.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/db/migrations/20221005183725_add_packaged_for_shipping_to_item.php:
--------------------------------------------------------------------------------
1 | table('item', [ 'signed' => false ]);
12 | $table
13 | ->addColumn('packaged_for_shipping', 'integer', [
14 | 'limit' => MysqlAdapter::INT_TINY,
15 | 'null' => true,
16 | 'after' => 'weight'
17 | ])
18 | ->update();
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/db/migrations/20230916233339_add_image_use_as_swatch.php:
--------------------------------------------------------------------------------
1 | table('image');
12 | $table
13 | ->addColumn('use_as_swatch', 'integer', [
14 | 'limit' => MysqlAdapter::INT_TINY,
15 | 'default' => 0,
16 | 'null' => false,
17 | 'after' => 'ext',
18 | ])
19 | ->update();
20 |
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/db/migrations/20211020024653_add_product_importance.php:
--------------------------------------------------------------------------------
1 | table('product', [ 'signed' => false ]);
11 | $table
12 | ->addColumn('importance', 'integer', [
13 | 'signed' => 'false',
14 | 'limit' => MysqlAdapter::INT_TINY,
15 | 'default' => 0,
16 | 'after' => 'slug',
17 | ])
18 | ->removeColumn('variation_style')
19 | ->update();
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/db/migrations/20220611214355_add_featured_to_department.php:
--------------------------------------------------------------------------------
1 | table('department', [ 'signed' => false ]);
12 | $table
13 | ->addColumn('featured', 'integer', [
14 | 'signed' => 'false',
15 | 'limit' => MysqlAdapter::INT_TINY,
16 | 'default' => 0,
17 | 'after' => 'slug',
18 | ])
19 | ->update();
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ui/pos/catalog/whatsnew.html:
--------------------------------------------------------------------------------
1 | {% extends 'catalog/page.html' %}
2 |
3 | {% block title %}
4 | New Products
5 | {% endblock %}
6 |
7 | {% block catalog_crumb %}
8 | What's New
23 |
24 | {% if products %}
25 | {% include 'catalog/products.twig' %}
26 | {% endif %}
27 |
28 | {% endblock %}
29 |
30 |
--------------------------------------------------------------------------------
/db/migrations/20200501232539_add_image_caption_and_data.php:
--------------------------------------------------------------------------------
1 | table('image');
11 | $table
12 | ->addColumn('caption', 'text', [
13 | 'limit' => MysqlAdapter::TEXT_MEDIUM,
14 | 'null' => true,
15 | ])
16 | ->addColumn('data', 'blob', [
17 | 'limit' => MysqlAdapter::BLOB_MEDIUM,
18 | 'null' => true,
19 | ])
20 | ->save();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/ui/pos/settings/nav.twig:
--------------------------------------------------------------------------------
1 | {% set pages = [
2 | { path: '/settings', label: 'Basic' },
3 | { path: '/settings/message', label: 'Canned Messages' },
4 | { path: '/settings/printing', label: 'Printing' },
5 | { path: '/settings/shipping', label: 'Shipping' },
6 | { path: '/settings/wordform', label: 'Wordforms' },
7 | { path: '/settings/advanced', label: 'Advanced' },
8 | ] %}
9 |
14 |
21 |
22 |
--------------------------------------------------------------------------------
/db/migrations/20200517011542_add_shipment_status_pending.php:
--------------------------------------------------------------------------------
1 | table('shipment', [ 'signed' => false ]);
10 | $table
11 | ->changeColumn('status', 'enum', [
12 | 'values' => [
13 | 'pending',
14 | 'unknown', 'pre_transit', 'in_transit', 'out_for_delivery',
15 | 'delivered', 'available_for_pickup', 'return_to_sender',
16 | 'failure', 'cancelled', 'error'
17 | ],
18 | 'default' => 'unknown'
19 | ])
20 | ->save();
21 |
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/db/migrations/20210624190738_add_shipping_cancelling_state.php:
--------------------------------------------------------------------------------
1 | table('shipment', [ 'signed' => false ]);
10 | $table
11 | ->changeColumn('status', 'enum', [
12 | 'values' => [
13 | 'pending',
14 | 'unknown', 'pre_transit', 'in_transit', 'out_for_delivery',
15 | 'delivered', 'available_for_pickup', 'return_to_sender',
16 | 'failure', 'cancelling', 'cancelled', 'error'
17 | ],
18 | 'default' => 'unknown'
19 | ])
20 | ->save();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/db/migrations/20200523233953_create_item_to_image.php:
--------------------------------------------------------------------------------
1 | table('item_to_image', [
10 | 'id' => false,
11 | 'primary_key' => ['item_id', 'image_id' ]
12 | ]);
13 | $table
14 | ->addColumn('item_id', 'integer', [ 'signed' => false ])
15 | ->addColumn('image_id', 'integer', [ 'signed' => false ])
16 | ->addColumn('priority', 'integer', [
17 | 'signed' => false,
18 | 'default' => '0'
19 | ])
20 | ->create();
21 |
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/db/migrations/20190602205056_add_image_times.php:
--------------------------------------------------------------------------------
1 | table('image', [ 'signed' => false ]);
10 | $table
11 | /* Don't use ->addTimestamps() because we use DATETIME */
12 | ->addColumn('created_at', 'datetime', [
13 | 'default' => 'CURRENT_TIMESTAMP',
14 | ])
15 | ->addColumn('updated_at', 'datetime', [
16 | 'update' => 'CURRENT_TIMESTAMP',
17 | 'default' => 'CURRENT_TIMESTAMP',
18 | ])
19 | ->addIndex(['created_at'])
20 | ->save();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/static/js/dummy-zaraz.js:
--------------------------------------------------------------------------------
1 | /* Just a simple Zaraz dummy that spits stuff to console */
2 | "use strict";
3 |
4 | class Zaraz {
5 | set (key, value, options= null) {
6 | console.log("Zaraz Set: %s = %s %O", key, value, options)
7 | }
8 |
9 | track (event, parameters= null) {
10 | console.log("Zaraz Track: %s %O", event, parameters)
11 | }
12 |
13 | ecommerce (event, parameters) {
14 | console.log("Zaraz Ecommerce: %s %O", event, parameters)
15 | }
16 | }
17 |
18 | /* Dummy Zaraz */
19 | let zaraz= new Zaraz()
20 | window.zaraz= new Zaraz()
21 |
22 | /* Dummy Microsoft */
23 | window.uetq= [];
24 |
25 | /* Dummy Pinterest */
26 | window.pintrk= (action, event, parameters) => {
27 | console.log("Pinterest %s: %s %O", action, event, parameters)
28 | }
29 |
--------------------------------------------------------------------------------
/db/migrations/20200505180239_add_venmo_pay_method.php:
--------------------------------------------------------------------------------
1 | table('payment');
10 | $table
11 | ->changeColumn('method', 'enum', [
12 | 'values' => [
13 | 'cash', 'change', 'credit', 'square', 'stripe',
14 | 'gift', 'check', 'dwolla', 'paypal', 'amazon',
15 | 'eventbrite', 'venmo',
16 | 'discount', 'withdrawal', 'bad', 'donation',
17 | 'internal'
18 | ],
19 | ])
20 | ->save();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/ui/pos/dialog/file-upload.html:
--------------------------------------------------------------------------------
1 | {% extends 'layout/dialog.html' %}
2 | {% import 'macros.twig' as scat %}
3 |
4 | {% block size 'modal-sm' %}
5 | {% block modal_options 'data-backdrop="static" data-keyboard="false"' %}
6 | {% block closebutton "" %}
7 |
8 | {% block title %}
9 | File Upload
10 | {% endblock %}
11 |
12 | {% block body %}
13 |
25 | {{ message|nl2br }}
26 |
27 |
Thanks!
31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /ui/pos/dialog/item-shipping-estimates.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout/dialog.html' %} 2 | {% import 'macros.twig' as scat %} 3 | 4 | {% block title %} 5 | Shipping Estimates for {{ item.name }} 6 | {% endblock %} 7 | 8 | {% block body %} 9 || Destination | 13 |Rate | 14 |Service | 15 |
|---|---|---|
| {{ estimate.address }} | 21 |{{ scat.amount(estimate.rate[0]) }} | 22 |{{ estimate.rate[1] }} | 23 |
9 | Set All Inactive 10 |
11 | {% endblock %} 12 | 13 | {% block script %} 14 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /lib/Scat/Model/Note.php: -------------------------------------------------------------------------------- 1 | kind == 'txn') { 7 | return $this->belongs_to('Txn', 'attach_id')->find_one(); 8 | } 9 | } 10 | 11 | public function about() { 12 | if ($this->kind == 'txn') { 13 | return $this->belongs_to('Txn', 'attach_id')->find_one()->person(); 14 | } 15 | if ($this->kind == 'person') { 16 | return $this->belongs_to('Person', 'attach_id')->find_one(); 17 | } 18 | } 19 | 20 | public function item() { 21 | if ($this->kind == 'item') { 22 | return $this->belongs_to('Item', 'attach_id')->find_one(); 23 | } 24 | } 25 | 26 | public function person() { 27 | return $this->belongs_to('Person'); 28 | } 29 | 30 | public function parent() { 31 | return $this->belongs_to('Note', 'parent_id')->find_one(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /db/migrations/20200206191248_add_device_table.php: -------------------------------------------------------------------------------- 1 | table('device', [ 'signed' => false ]); 11 | $table 12 | ->addColumn('person_id', 'integer', [ 13 | 'signed' => 'false', 14 | 'null' => 'true' 15 | ]) 16 | ->addColumn('token', 'string', [ 'limit' => 255, 'null' => true ]) 17 | ->addColumn('created', 'datetime', [ 18 | 'default' => 'CURRENT_TIMESTAMP' 19 | ]) 20 | ->addColumn('modified', 'datetime', [ 21 | 'default' => 'CURRENT_TIMESTAMP', 22 | 'update' => 'CURRENT_TIMESTAMP' 23 | ]) 24 | ->create(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /db/migrations/20191114022946_add_eventbrite_pay_method.php: -------------------------------------------------------------------------------- 1 | table('payment', [ 'signed' => false ]); 11 | $table 12 | ->changeColumn('method', 'enum', [ 13 | 'values' => [ 14 | 'cash', 'change', 'credit', 'square', 'stripe', 15 | 'gift', 'check', 'dwolla', 'paypal', 'amazon', 16 | 'eventbrite', 17 | 'discount', 'withdrawal', 'bad', 'donation', 18 | 'internal' 19 | ], 20 | ]) 21 | ->save(); 22 | } 23 | 24 | public function down() { 25 | // We don't actually undo this, no harm in leaving it 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ui/web/backroom/ads.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout/page.html' %} 2 | {% import 'macros.twig' as scat %} 3 | 4 | {% block title -%} 5 | Internal Ads @ Raw Materials Art Supplies 6 | {%- endblock %} 7 | 8 | {% block content %} 9 |21 | We will let you know when your order 22 | {% if sale.shipping_address_id == 1 %} 23 | is ready for pickup, 24 | {% else %} 25 | has shipped, 26 | {% endif %} 27 | or contact you if there are any issues. 28 |
29 | 30 | {% embed 'cart/cart.twig' with { cart: sale } %} 31 | {% endembed %} 32 | {% endblock %} 33 | -------------------------------------------------------------------------------- /ui/web/email/contact.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout/email.html' %} 2 | 3 | {% block title -%} 4 | {{ subject }} 5 | {%- endblock %} 6 | 7 | {% block content_top %} 8 |{{ message }}
9 | 10 | {% if request.donation %} 11 |Sorry, but something went awry here at this website for Raw Materials Art Supplies. It appears that that page you are looking for no longer exists.
34 | 35 | 36 | Start from the top » 37 | 38 | 39 | {% endblock %} 40 | -------------------------------------------------------------------------------- /ui/pos/person/searchform.twig: -------------------------------------------------------------------------------- 1 || Code | 17 | {% if use_short_name and use_variation %} 18 |Variation | 19 | {% endif %} 20 |Name | 21 |Stock | 22 |Count | 23 |
|---|---|---|---|---|
| {{ item.code }} | 29 | {% if use_short_name and use_variation %} 30 |{{ item.variation }} | 31 | {% endif %} 32 |33 | {{ use_short_name and item.short_name ? item.short_name : item.name }} 34 | | 35 |{{ item.stock }} | 36 |37 | |
{{ ad.caption }}
25 | {{ ad.button_label }} 26 |18 | This site is currently unavailable. 19 |
20 |21 | We are currently working to correct the problem. 22 |
23 |24 | Thank you for your patience. 25 |
26 |
29 | | Day | 15 |Sales | 16 |Average | 17 |In Person | 18 |Online | 19 |Total | 20 |
|---|---|---|---|---|---|
| {{ day.raw_date | date("l, F j") }} | 26 |{{ day.transactions }} | 27 |{{ scat.amount(day.total / day.transactions) }} | 28 |{{ scat.amount(day.in_person) }} | 29 |{{ scat.amount(day.online) }} | 30 |{{ scat.amount(day.total) }} | 31 |
25 | No results were found for your original search terms.
26 | We changed it to {{ q }}
27 | and got these results.
28 |
Sorry, there was an error handling your query.
36 | {% if DEBUG %} 37 |{{ error }}
38 | {% endif %}
39 | {% else %}
40 | Sorry, we didn't find anything for that search.
41 | {% endif %} 42 | {% endif %} 43 | 44 | {% endblock %} 45 | -------------------------------------------------------------------------------- /extern/select2-bootstrap-theme-0.1.0-beta.10/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2012-2016 Florian Kissling and contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /ui/pos/email/abandoned-cart.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout/email.html' %} 2 | 3 | {% block title -%} 4 | It looks like you left something behind... 5 | {%- endblock %} 6 | 7 | {% block preheader %} 8 | Still looking? How can we help? 9 | {% endblock %} 10 | 11 | {% block content_top %} 12 |Thanks for stopping by RawMaterialsLA.com.
13 |Looks like you forgot something in your shipping cart. Let's go make it yours!
14 | {% endblock %} 15 | 16 | {% block call_to_action %} 17 | return to your cart 18 | {% endblock %} 19 | 20 | {% block content_bottom %} 21 |22 | Have any questions? Just reply to this email and we'll get back to you with 23 | some answers! 24 |
25 | {% endblock %} 26 | 27 | {% block content_very_bottom %} 28 |30 | Let’s be besties. 31 |
32 | 33 |These are in-stock items that have not moved in more than a year.
11 || # | 16 |Code | 17 |Name | 18 |Last | 19 |Stocked | 20 |
|---|---|---|---|---|
| {{ loop.index }} | 26 |27 | 28 | {{ item.code }} 29 | 30 | | 31 |32 | {{ item.name }} 33 | | 34 |35 | {{ item.last_sale }} 36 | | 37 |38 | {{ item.stocked }} 39 | | 40 |
| Number | 19 |Created | 20 |Last Seen | 21 |Balance | 22 |Expires | 23 |
|---|---|---|---|---|
| 29 | 30 | {{- card.id -}} 31 | 32 | | 33 |{{ card.created }} | 34 |{{ card.last_seen }} | 35 |{{ scat.amount(card.balance) }} | 36 |{{ card.expires }} | 37 |
21 |
39 |
44 | {{ delivery.handling_instructions }} 45 |
46 | 47 |48 | Ready to go now. 49 |
50 | 51 |52 | Thanks! 53 |
54 | {% endblock %} 55 | 56 | {% block content_bottom %} 57 | {% endblock %} 58 | -------------------------------------------------------------------------------- /lib/Scat/Exception/FileUploadException.php: -------------------------------------------------------------------------------- 1 | codeToMessage($code); 8 | parent::__construct($message, $code); 9 | } 10 | 11 | private function codeToMessage($code) 12 | { 13 | switch ($code) { 14 | case UPLOAD_ERR_INI_SIZE: 15 | $message= "The uploaded file exceeds the upload_max_filesize directive in php.ini"; 16 | break; 17 | case UPLOAD_ERR_FORM_SIZE: 18 | $message= "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"; 19 | break; 20 | case UPLOAD_ERR_PARTIAL: 21 | $message= "The uploaded file was only partially uploaded"; 22 | break; 23 | case UPLOAD_ERR_NO_FILE: 24 | $message= "No file was uploaded"; 25 | break; 26 | case UPLOAD_ERR_NO_TMP_DIR: 27 | $message= "Missing a temporary folder"; 28 | break; 29 | case UPLOAD_ERR_CANT_WRITE: 30 | $message= "Failed to write file to disk"; 31 | break; 32 | case UPLOAD_ERR_EXTENSION: 33 | $message= "File upload stopped by extension"; 34 | break; 35 | 36 | default: 37 | $message= "Unknown upload error"; 38 | break; 39 | } 40 | 41 | return $message; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /ui/pos/dialog/pay-cash.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout/dialog.html' %} 2 | {% import 'macros.twig' as scat %} 3 | 4 | {% block title %} 5 | Cash Payment 6 | {% endblock %} 7 | 8 | {% block size 'modal-sm' %} 9 | 10 | {% block body %} 11 |10 | {% if txn.person.name %} 11 | Dear {{ txn.person.name }}, 12 | {% else %} 13 | Dear, 14 | {% endif %} 15 |
16 | 17 |18 | Thanks again for your order from Raw Materials Art Supplies! 19 |
20 |21 | We wanted to let you know that your order ({{ txn.formatted_number }}) was 22 | reported to be out for delivery by {{ scat.format_shipping_carrier(tracker.carrier) }} on 23 | {{ (out_for_delivery ?: tracker.updated_at) | date("c", "UTC") | date("l, F j", txn.shipping_address.timezone) }}. 24 | {% if out_for_delivery and out_for_delivery|date("Y-m-d") != tracker.updated_at|date("Y-m-d") %} 25 | (Sorry for the slow update, we just got the news!) 26 | {% endif %} 27 |
28 |29 | If there are any problems with receiving your package, please let us know right away so we can get it sorted out! 30 |
31 | 32 | {% endblock %} 33 | 34 | {% set call_to_action_url= tracker.public_url %} 35 | {% block call_to_action "Track Your Shipment" %} 36 | 37 | {% block content_bottom %} 38 |39 | Thank you for your business! 40 |
41 | {% endblock %} 42 | -------------------------------------------------------------------------------- /db/migrations/20200411021256_add_giftcard_times.php: -------------------------------------------------------------------------------- 1 | table('giftcard', [ 'signed' => false ]); 10 | $table 11 | /* Don't use ->addTimestamps() because we use DATETIME */ 12 | ->addColumn('created_at', 'datetime', [ 13 | 'default' => 'CURRENT_TIMESTAMP', 14 | ]) 15 | ->addColumn('updated_at', 'datetime', [ 16 | 'update' => 'CURRENT_TIMESTAMP', 17 | 'default' => 'CURRENT_TIMESTAMP', 18 | ]) 19 | ->addIndex(['created_at']) 20 | ->save(); 21 | 22 | $this->execute("UPDATE giftcard SET 23 | created_at = IFNULL((SELECT MIN(entered) 24 | FROM giftcard_txn 25 | WHERE card_id = giftcard.id), 26 | created_at), 27 | updated_at= IFNULL((SELECT MAX(entered) 28 | FROM giftcard_txn 29 | WHERE card_id = giftcard.id), 30 | updated_at)"); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ui/pos/email/available_for_pickup.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout/email.html' %} 2 | {% import 'macros.twig' as scat %} 3 | 4 | {% block title -%} 5 | Your order is ready for pickup! 6 | {%- endblock %} 7 | 8 | {% block content_top %} 9 |10 | {% if txn.person.name %} 11 | Dear {{ txn.person.name }}, 12 | {% else %} 13 | Dear, 14 | {% endif %} 15 |
16 | 17 |18 | Thank you for your order from Raw Materials Art Supplies! 19 |
20 |21 | We wanted to let you know that your order ({{ txn.formatted_number }}) was 22 | reported to be ready for pickup from {{ scat.format_shipping_carrier(tracker.carrier) }} on 23 | {{ (available_for_pickup ?: tracker.updated_at) | date("c", "UTC") | date("l, F j", txn.shipping_address.timezone) }}. 24 | {% if available_for_pickup and available_for_pickup|date("Y-m-d") != tracker.updated_at|date("Y-m-d") %} 25 | (Sorry for the slow update, we just got the news!) 26 | {% endif %} 27 |
28 |29 | If there are any problems with picking up your package, please let us know right away so we can get it sorted out! 30 |
31 | 32 | {% endblock %} 33 | 34 | {% set call_to_action_url= tracker.public_url %} 35 | {% block call_to_action "Track Your Shipment" %} 36 | 37 | {% block content_bottom %} 38 |39 | Thank you for your business! 40 |
41 | {% endblock %} 42 | -------------------------------------------------------------------------------- /ui/web/paymarks/cc-discover.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /db/migrations/20190525204400_initial_functions.php: -------------------------------------------------------------------------------- 1 | execute($query); 22 | 23 | $query= <<| Brand | 30 |Total | 31 |
|---|---|
| {{ brand.name ?? '(unknown)' }} | 37 |{{ scat.amount(brand.total) }} | 38 |
No backorders for this vendor.
11 | {% endif %} 12 | 13 | {% for backorder in backorders %} 14 || SKU | 26 |Code | 27 |Name | 28 |Quantity | 29 |
|---|---|---|---|
| {{ item.vendor_sku(person.id) }} | 35 |36 | 37 | {{ item.code }} 38 | 39 | | 40 |{{ item.name }} | 41 |{{ item.ordered - item.allocated }} | 42 |
17 | Need help completing your purchase? Sorry, sometimes the system 18 | isn't able to calculate shipping costs due to incomplete information in 19 | our system or other technical problems. We try to respond to all requests 20 | for help within one business day. 21 |
22 | 23 |24 | Please note that we do not currently ship canvases or panels larger than 25 | 30" × 40" and rolls of seamless backdrop paper wider than 86" 26 | outside of our local Los Angeles delivery area. 27 |
28 | 29 | 40 | 41 | {% embed 'cart/cart.twig' %} 42 | {% block buttons %} 43 | {% endblock %} 44 | {% endembed %} 45 | 46 | {% endblock %} 47 | 48 | {% block script %} 49 | {% endblock %} 50 | -------------------------------------------------------------------------------- /ui/pos/settings/wordforms.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout/page.html' %} 2 | 3 | {% block title %} 4 | Wordforms 5 | {% endblock %} 6 | 7 | {% block content %} 8 | 9 || Source | 17 |Destination | 18 |Last Modified | 19 |
|---|---|---|
| 25 | {{- wordform.source -}} 26 | | 27 |28 | {{- wordform.dest -}} 29 | | 30 |31 | {{- wordform.modified ?: wordform.added -}} 32 | | 33 |38 | 41 | | 42 |
27 | {{ shipment.weight }} 28 |
29 |39 | {{ shipment.dimensions }} 40 |
41 |Shipments in last 30 days.
10 || # | 14 |Created | 15 |Dimensions (") | 16 |Weight (lbs) | 17 |Destination | 18 |Carrier / Service | 19 |Rate | 20 |
|---|---|---|---|---|---|---|
| 26 | {{ loop.index }} 27 | | 28 |29 | 30 | {{ shipment.created | date('Y-m-d') }} 31 | 32 | | 33 |34 | {% if shipment.width %} 35 | {{ shipment.width }} x {{ shipment.length }} x {{ shipment.height }} 36 | {% else %} 37 | {% endif %} 38 | | 39 |40 | {{ shipment.weight }} 41 | | 42 |43 | {{ shipment.txn.shipping_address.city }}, 44 | {{ shipment.txn.shipping_address.state }} 45 | {{ shipment.txn.shipping_address.zip }} 46 | | 47 |48 | {{ scat.format_shipping_carrier(shipment.carrier) }} / 49 | {{ shipment.service }} 50 | | 51 |52 | {{ scat.amount(shipment.rate) }} 53 | | 54 |
| Slug | 17 |Subject | 18 |New Status | 19 |Last Modified | 20 |
|---|---|---|---|
| 26 | {{- message.slug -}} 27 | | 28 |29 | {{- message.subject -}} 30 | | 31 |32 | {{- message.new_status -}} 33 | | 34 |35 | {{- message.modified -}} 36 | | 37 |42 | 45 | | 46 |
{{ brand.description|markdown_to_html }}
51 | 52 |12 | No results found. 13 | Nothing was found for those search parameters. 14 | {% if not (q matches '/active:0/') %} 15 | Try again with inactive people. 16 | {% endif %} 17 |
18 | {% endif %} 19 | 20 | {% if people %} 21 || # | 25 |Name | 26 |Company | 27 |Phone | 28 ||
|---|---|---|---|---|
| 35 | {{ loop.index }} 36 | | 37 |38 | {{ person.name ?: '' }} 39 | | 40 |41 | {{ person.company ?: '' }} 42 | | 43 |44 | {{ person.pretty_phone ?: '' }} 45 | | 46 |47 | {{ person.email ?: '' }} 48 | | 49 |
| Date | 15 |Points | 16 |Note | 17 |
|---|---|---|
| {{ act.processed }} | 23 |{{ act.points }} | 24 |{{ act.note }} | 25 |