diff --git a/app.js b/app.js new file mode 100644 index 0000000..5640e5a --- /dev/null +++ b/app.js @@ -0,0 +1,15 @@ +const express = require('express') +const app = express() +const bodyParser = require('body-parser') +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: true })); +app.set('view engine', 'ejs'); +let index = require('./routs/index') +let supplier = require('./routs/suppliers') +let item = require('./routs/items') +app.use('/', index) +app.use('/suppliers', supplier) +app.use('/items', item) + + +app.listen(3000); \ No newline at end of file diff --git a/config/config.json b/config/config.json new file mode 100644 index 0000000..1a0f736 --- /dev/null +++ b/config/config.json @@ -0,0 +1,23 @@ +{ + "development": { + "username": "javas", + "password": "1234", + "database": "livecode4", + "host": "127.0.0.1", + "dialect": "postgres" + }, + "test": { + "username": "root", + "password": null, + "database": "database_test", + "host": "127.0.0.1", + "dialect": "mysql" + }, + "production": { + "username": "root", + "password": null, + "database": "database_production", + "host": "127.0.0.1", + "dialect": "mysql" + } +} diff --git a/migrations/20171012063414-create-item.js b/migrations/20171012063414-create-item.js new file mode 100644 index 0000000..46e3d80 --- /dev/null +++ b/migrations/20171012063414-create-item.js @@ -0,0 +1,35 @@ +'use strict'; +module.exports = { + up: function(queryInterface, Sequelize) { + return queryInterface.createTable('Items', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + name: { + type: Sequelize.STRING + }, + brand: { + type: Sequelize.STRING + }, + codeitem: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: new Date() + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: new Date() + } + }); + }, + down: function(queryInterface, Sequelize) { + return queryInterface.dropTable('Items'); + } +}; \ No newline at end of file diff --git a/migrations/20171012063538-create-supplier.js b/migrations/20171012063538-create-supplier.js new file mode 100644 index 0000000..fe405d1 --- /dev/null +++ b/migrations/20171012063538-create-supplier.js @@ -0,0 +1,32 @@ +'use strict'; +module.exports = { + up: function(queryInterface, Sequelize) { + return queryInterface.createTable('Suppliers', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + name: { + type: Sequelize.STRING + }, + kota: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: new Date() + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: new Date() + } + }); + }, + down: function(queryInterface, Sequelize) { + return queryInterface.dropTable('Suppliers'); + } +}; \ No newline at end of file diff --git a/migrations/20171012064351-create-supplier-item.js b/migrations/20171012064351-create-supplier-item.js new file mode 100644 index 0000000..7620197 --- /dev/null +++ b/migrations/20171012064351-create-supplier-item.js @@ -0,0 +1,35 @@ +'use strict'; +module.exports = { + up: function(queryInterface, Sequelize) { + return queryInterface.createTable('SupplierItems', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + SupplierId: { + type: Sequelize.INTEGER + }, + ItemId: { + type: Sequelize.INTEGER + }, + price: { + type: Sequelize.INTEGER + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: new Date() + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: new Date + } + }); + }, + down: function(queryInterface, Sequelize) { + return queryInterface.dropTable('SupplierItems'); + } +}; \ No newline at end of file diff --git a/models/index.js b/models/index.js new file mode 100644 index 0000000..7540dba --- /dev/null +++ b/models/index.js @@ -0,0 +1,36 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var Sequelize = require('sequelize'); +var basename = path.basename(module.filename); +var env = process.env.NODE_ENV || 'development'; +var config = require(__dirname + '/../config/config.json')[env]; +var db = {}; + +if (config.use_env_variable) { + var sequelize = new Sequelize(process.env[config.use_env_variable]); +} else { + var sequelize = new Sequelize(config.database, config.username, config.password, config); +} + +fs + .readdirSync(__dirname) + .filter(function(file) { + return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); + }) + .forEach(function(file) { + var model = sequelize['import'](path.join(__dirname, file)); + db[model.name] = model; + }); + +Object.keys(db).forEach(function(modelName) { + if (db[modelName].associate) { + db[modelName].associate(db); + } +}); + +db.sequelize = sequelize; +db.Sequelize = Sequelize; + +module.exports = db; diff --git a/models/item.js b/models/item.js new file mode 100644 index 0000000..53fc4f6 --- /dev/null +++ b/models/item.js @@ -0,0 +1,25 @@ +'use strict'; +module.exports = function(sequelize, DataTypes) { + var Item = sequelize.define('Item', { + name: DataTypes.STRING, + brand: DataTypes.STRING, + codeitem:DataTypes.STRING +/* + , { + type:DataTypes.STRING, + validate:{ + is: /(HP|SW|LP)\d{4}/, + len: { + args: [2,7], + msg: "The password length should be between 7 and 42 characters." + } + } + } +*/ + }); + Item.associate = (model) => { + Item.hasMany(model.SupplierItem,{foreignKey:'ItemId'}) + Item.belongsToMany(model.Supplier,{through:'SupplierItem'}) + } + return Item; +}; \ No newline at end of file diff --git a/models/supplier.js b/models/supplier.js new file mode 100644 index 0000000..c6bcd55 --- /dev/null +++ b/models/supplier.js @@ -0,0 +1,12 @@ +'use strict'; +module.exports = function(sequelize, DataTypes) { + var Supplier = sequelize.define('Supplier', { + name: DataTypes.STRING, + kota: DataTypes.STRING + }); + Supplier.associate = (model) => { + Supplier.hasMany(model.SupplierItem, {foreignKey:'SupplierId'}) + Supplier.belongsToMany(model.Item, {through:'SupplierItem'}) + } + return Supplier; +}; \ No newline at end of file diff --git a/models/supplieritem.js b/models/supplieritem.js new file mode 100644 index 0000000..80888aa --- /dev/null +++ b/models/supplieritem.js @@ -0,0 +1,13 @@ +'use strict'; +module.exports = function(sequelize, DataTypes) { + var SupplierItem = sequelize.define('SupplierItem', { + SupplierId: DataTypes.INTEGER, + ItemId: DataTypes.INTEGER, + price: DataTypes.INTEGER + }); + SupplierItem.associate = (model) => { + SupplierItem.belongsTo(model.Supplier) + SupplierItem.belongsTo(model.Item) + } + return SupplierItem; +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..19994ea --- /dev/null +++ b/package-lock.json @@ -0,0 +1,621 @@ +{ + "name": "livecode-4", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/geojson": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.5.tgz", + "integrity": "sha512-Vv/xcob92T/Vncg/AvPMYS0R2a+PYBnnTGNb7bE8jyqEXqq08Tp1frhx6+ExKCImyQq6iLfqjeXt/Wtsh8Sjgw==" + }, + "@types/node": { + "version": "8.0.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.34.tgz", + "integrity": "sha512-Jnmm57+nHqvJUPwUzt1CLoLzFtF2B2vgG7cWFut+a4nqTp9/L6pL0N+o0Jt3V7AQnCKMsPEqQpLFZYleBCdq3w==" + }, + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.1", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } + }, + "buffer-writer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", + "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cls-bluebird": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.0.1.tgz", + "integrity": "sha1-wlmkgK4CwOUGE0MHuxPbMERu4uc=", + "requires": { + "is-bluebird": "1.0.2", + "shimmer": "1.1.0" + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dottie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.0.tgz", + "integrity": "sha1-2hkZgci41xPKARXViYzzl8Lw3dA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=" + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "requires": { + "accepts": "1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.1", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.2", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "generic-pool": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.1.8.tgz", + "integrity": "sha1-CYRLZUW8kXfsIYvTXUrYlMZb4nE=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" + }, + "is-bluebird": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", + "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "moment": { + "version": "2.19.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz", + "integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc=" + }, + "moment-timezone": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.13.tgz", + "integrity": "sha1-mc5cfYJyYusPH3AgRBd/YHRde5A=", + "requires": { + "moment": "2.19.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "packet-reader": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", + "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc=" + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pg": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.3.0.tgz", + "integrity": "sha1-J14nRm5UpkX2tKFvasrfa4Sa2Ds=", + "requires": { + "buffer-writer": "1.0.1", + "js-string-escape": "1.0.1", + "packet-reader": "0.3.1", + "pg-connection-string": "0.1.3", + "pg-pool": "2.0.3", + "pg-types": "1.12.1", + "pgpass": "1.0.2", + "semver": "4.3.2" + } + }, + "pg-connection-string": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", + "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" + }, + "pg-pool": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.3.tgz", + "integrity": "sha1-wCIDLIlJ8xKk+R+2QJzgQHa+Mlc=" + }, + "pg-types": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.1.tgz", + "integrity": "sha1-1kCH45A7WP+q0nnnWVxSIIoUw9I=", + "requires": { + "postgres-array": "1.0.2", + "postgres-bytea": "1.0.0", + "postgres-date": "1.0.3", + "postgres-interval": "1.1.1" + } + }, + "pgpass": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", + "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", + "requires": { + "split": "1.0.1" + } + }, + "postgres-array": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.2.tgz", + "integrity": "sha1-jgsy6wO/d6XAp4UeBEHBaaJWojg=" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz", + "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" + }, + "postgres-interval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz", + "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==", + "requires": { + "xtend": "4.0.1" + } + }, + "proxy-addr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", + "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.5.2" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "retry-as-promised": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.1.tgz", + "integrity": "sha1-91BZGD+XMHccCbrR7tV1N5McvJ0=", + "requires": { + "bluebird": "3.5.1", + "debug": "2.6.9" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "semver": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", + "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.1", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + } + }, + "sequelize": { + "version": "4.13.8", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.13.8.tgz", + "integrity": "sha512-7CUPFrIVbhNF2p7hxtnwofzcgHW7noECulu5cvb2u1du4GFpFtkb0TZD923tcViAeRUiweu9c3NrzzOtS5t0+g==", + "requires": { + "bluebird": "3.5.1", + "cls-bluebird": "2.0.1", + "debug": "3.1.0", + "depd": "1.1.1", + "dottie": "2.0.0", + "generic-pool": "3.1.8", + "inflection": "1.12.0", + "lodash": "4.17.4", + "moment": "2.19.1", + "moment-timezone": "0.5.13", + "retry-as-promised": "2.3.1", + "semver": "5.4.1", + "terraformer-wkt-parser": "1.1.2", + "toposort-class": "1.0.1", + "uuid": "3.1.0", + "validator": "8.2.0", + "wkx": "0.4.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + } + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + }, + "shimmer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", + "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=" + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2.3.8" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "terraformer": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.8.tgz", + "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", + "requires": { + "@types/geojson": "1.0.5" + } + }, + "terraformer-wkt-parser": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", + "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", + "requires": { + "terraformer": "1.0.8" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "validator": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-8.2.0.tgz", + "integrity": "sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "wkx": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.2.tgz", + "integrity": "sha1-d201pjSlwi5lbkdEvetU+D/Szo0=", + "requires": { + "@types/node": "8.0.34" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f0e9acd --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "livecode-4", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/kholes/livecode-4.git" + }, + "author": "kholes", + "license": "ISC", + "bugs": { + "url": "https://github.com/kholes/livecode-4/issues" + }, + "homepage": "https://github.com/kholes/livecode-4#readme", + "dependencies": { + "body-parser": "^1.18.2", + "ejs": "^2.5.7", + "express": "^4.16.2", + "pg": "^7.3.0", + "sequelize": "^4.13.8" + } +} diff --git a/routs/index.js b/routs/index.js new file mode 100644 index 0000000..3d6ca19 --- /dev/null +++ b/routs/index.js @@ -0,0 +1,6 @@ +const express = require('express') +const router = express.Router() +router.get('/', (req,res) => { + res.render('index') +}) +module.exports = router \ No newline at end of file diff --git a/routs/items.js b/routs/items.js new file mode 100644 index 0000000..282de69 --- /dev/null +++ b/routs/items.js @@ -0,0 +1,32 @@ +const express = require('express') +const router = express.Router() +const model = require('../models') +router.get('/', (req,res) => { + model.Item.findAll().then(items => { + res.render('item', {data:items}) + }) +}) +router.get('/add', (req,res) => { + res.render('item_add') +}) +router.post('/add', (req,res) => { + model.Item.create(req.body).then(add => { + res.redirect('/items') + }) +}) +router.get('/edit/:id', (req,res) => { + model.Item.findById(req.params.id).then(item => { + res.render('item_edit', {data:item}) + }) +}) +router.post('/edit/:id', (req,res) => { + model.Item.update(req.body,{where:{id:req.params.id}}).then(edit => { + res.redirect('/items') + }) +}) +router.get('/delete/:id', (req,res) => { + model.Item.destroy({where:{id:req.params.id}}).then(del => { + res.redirect('/items') + }) +}) +module.exports = router \ No newline at end of file diff --git a/routs/suppliers.js b/routs/suppliers.js new file mode 100644 index 0000000..6cb3b23 --- /dev/null +++ b/routs/suppliers.js @@ -0,0 +1,60 @@ +const express = require('express') +const router = express.Router() +const model = require('../models') +router.get('/', (req,res) => { + model.Supplier.findAll().then(suppliers => { + let prom = suppliers.map(supplier => { + return new Promise((resolve,reject) => { + supplier.getItems().then(items => { + if(items){ + let newSupplier = items.map(item => { + return item.name + }) + supplier["item_name"] = newSupplier + } + else { + supplier["item_name"] = "No Item Yet" + } + resolve(supplier) + }) + }) + }) + Promise.all(prom).then(suppliers => { + res.render('supplier', {data:suppliers}) + }) + }) +}) +router.get('/add', (req,res) => { + res.render('supplier_add') +}) +router.post('/add', (req,res) => { + model.Supplier.create(req.body).then(add => { + res.redirect('/suppliers') + }) +}) +router.get('/edit/:id', (req,res) => { + model.Supplier.findById(req.params.id).then(supplier => { + res.render('supplier_edit', {data:supplier}) + }) +}) +router.post('/edit/:id', (req,res) => { + model.Supplier.update(req.body,{where:{id:req.params.id}}).then(edit => { + res.redirect('/suppliers') + }) +}) +router.get('/delete/:id', (req,res) => { + model.Supplier.destroy({where:{id:req.params.id}}).then(del => { + res.redirect('/suppliers') + }) +}) +router.get('/assign/:id', (req,res) => { + model.Supplier.findOne({where:{id:req.params.id}}).then(row_supplier => { + model.Item.findAll().then(row_items => { + res.render('supplier_assign_item', {row_supplier:row_supplier,row_items:row_items}) + }) + }) + .catch(err => { + res.send(err) + }) +}) +module.exports = router \ No newline at end of file diff --git a/seeders/20171012073230-add-item.js b/seeders/20171012073230-add-item.js new file mode 100644 index 0000000..4f237f4 --- /dev/null +++ b/seeders/20171012073230-add-item.js @@ -0,0 +1,53 @@ +'use strict'; + +module.exports = { + up: function (queryInterface, Sequelize) { + /* + Add altering commands here. + Return a promise to correctly handle asynchronicity. + + Example: + return queryInterface.bulkInsert('Person', [{ + name: 'John Doe', + isBetaMember: false + }], {}); + */ + return queryInterface.bulkInsert('Items', [ + { + name: 'Iphone X', + brand: 'Apple', + codeitem: 'HP0234' + }, + { + name: 'MI 5S', + brand: 'Xiaomi', + codeitem: 'SW0923' + }, + { + name: 'Iphone 8', + brand: 'Apple', + codeitem: 'HP0876' + }, + { + name: 'Galaxy S8', + brand: 'Samsung', + codeitem: 'LP6543' + }, + { + name: 'Q6 Astro Black', + brand: 'LG', + codeitem: 'LP0421' + }, + ]); + }, + + down: function (queryInterface, Sequelize) { + /* + Add reverting commands here. + Return a promise to correctly handle asynchronicity. + + Example: + return queryInterface.bulkDelete('Person', null, {}); + */ + } +}; diff --git a/views/index.ejs b/views/index.ejs new file mode 100644 index 0000000..8000fa2 --- /dev/null +++ b/views/index.ejs @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/views/item.ejs b/views/item.ejs new file mode 100644 index 0000000..f91f896 --- /dev/null +++ b/views/item.ejs @@ -0,0 +1,31 @@ + + + + + + + +

Add Items

+ + + + + + + <%data.forEach(i => {%> + + + + + + + + + <%})%> +
IDNameBrandCode ItemAction
<%-i.id%><%-i.name%><%-i.brand%><%-i.codeitem%>EditDelete
+ + \ No newline at end of file diff --git a/views/item_add.ejs b/views/item_add.ejs new file mode 100644 index 0000000..dc3901c --- /dev/null +++ b/views/item_add.ejs @@ -0,0 +1,21 @@ + + + + + + +

Add Item

+

List data

+
+

Name

+ +

Brand

+ +

Code Item

+ +

+ +

+
+ + \ No newline at end of file diff --git a/views/item_edit.ejs b/views/item_edit.ejs new file mode 100644 index 0000000..e58b1a3 --- /dev/null +++ b/views/item_edit.ejs @@ -0,0 +1,21 @@ + + + + + + +

Edit Item

+

List data

+
+

Name

+ +

Brand

+ +

Code Item

+ +

+ +

+
+ + \ No newline at end of file diff --git a/views/supplier.ejs b/views/supplier.ejs new file mode 100644 index 0000000..a7686be --- /dev/null +++ b/views/supplier.ejs @@ -0,0 +1,46 @@ + + + + + + + +

Add Suppliers

+ + + + + + + + <%data.forEach(i => {%> + + + + + + + + + + <%})%> +
IDKotaNameItemsAdd ItemAction
<%-i.id%><%-i.name%><%-i.kota%> + <% + if(i.item_name.length!=0){ + i.item_name.forEach((j,no) => + {%> + <%-no+1%>. <%-j%>
+ <%}) + }else{ + %> + No Item Yet + <% + } + %> +
Assign ItemEditDelete
+ + \ No newline at end of file diff --git a/views/supplier_add.ejs b/views/supplier_add.ejs new file mode 100644 index 0000000..25c431e --- /dev/null +++ b/views/supplier_add.ejs @@ -0,0 +1,19 @@ + + + + + + +

Add Supplayer

+

List data

+
+

Name

+ +

Kota

+ +

+ +

+
+ + \ No newline at end of file diff --git a/views/supplier_assign_item.ejs b/views/supplier_assign_item.ejs new file mode 100644 index 0000000..06c3887 --- /dev/null +++ b/views/supplier_assign_item.ejs @@ -0,0 +1,23 @@ + + + + + + + +

Add item for supplier

+

Name : <%-row_supplier.name%>

+

City : <%-row_supplier.kota%>

+

List Item

+ + + \ No newline at end of file diff --git a/views/supplier_edit.ejs b/views/supplier_edit.ejs new file mode 100644 index 0000000..273ccec --- /dev/null +++ b/views/supplier_edit.ejs @@ -0,0 +1,19 @@ + + + + + + +

Add Supplayer

+

List data

+
+

Name

+ +

Kota

+ +

+ +

+
+ + \ No newline at end of file