(function () { 'use strict'; var _Root = {}; _Root.attrs = {}; _Root.allowFileDrop = function(cb){ _Root.attrs.ondragover = function(e){ e.preventDefault(); }; _Root.attrs.ondrop = function(e){ e.preventDefault(); // don't open the file in the browser var files = []; // some browsers use `.items` and some use `.files`, so check for both: if (e.dataTransfer.items) { for (var i = 0; i < e.dataTransfer.items.length; i++) { if (e.dataTransfer.items[i].kind === 'file') { // If dropped items aren't files, reject them files.push( e.dataTransfer.items[i].getAsFile() ); } } } else { for (var i = 0; i < e.dataTransfer.files.length; i++) { files.push( e.dataTransfer.files[i] ); } } for(var i=0, file=null; i B) { return 1;   } else{ // names must be equal   return 0; } } function ItemBrowser(initialVnode) { return { view: function(vnode) { var items = vnode.attrs.items; items.sort(cmp_fn); return m(".item-browser.container", [ //m(ItemFilter), m(ItemListing, {items: items}) ]); } } } var _CollectionsList = {}; _CollectionsList.house_brands = [ 'Kadima', 'Kapricci', 'BubbleGum', 'Primmera' ]; _CollectionsList.designer_brands = [ //'Kadima', //'Kapricci', //'BubbleGum', //'Primmera', 'Adidas', 'Armani Exchange', 'Bvlgari', 'Burberry', 'Calvin Klein', 'Carolina Herrera', 'Carrera', 'Christian Dior', 'Coach', 'Converse', 'Diesel', 'Dolce Gabbana', 'Emporio Armani', 'Ermenegildo Zegna', 'Escada', 'Fendi', 'Fila', 'Furla', 'Gant', 'Giorgio Armani', 'Gucci', 'Guess', 'Harley Davidson', 'Hugo Boss', 'Just Cavalli', 'Kenneth Cole Reaction', 'Kenneth Cole New York', 'Lacoste', 'Michael Kors', 'Mont Blanc', 'Nike', 'Nina Ricci', 'Oakley', 'Persol', 'Prada', 'Prada Sport', 'Puma', 'Ray Ban', 'Roberto Cavalli', 'Salvatore Ferragamo', 'Silhouette', 'Skechers', 'Timberland', 'Tom Ford', 'Tommy Hilfiger', 'Tory Burch', 'Tous', 'Valentino', 'Versace', 'Vogue' ]; var CollectionsList = function(){ return {view: function(vnode){ var brands = _CollectionsList.house_brands; return m('.container', [ m('.columns', [ m('.column.col-12', [ m('h1.text-center', 'Collections') ]) ]), m('.columns', brands.map(function(brand){ return m('.column.col-4.col-md-6.col-xs-12.mt-1', [ m('.card.c-hand', {onclick: function(e){ //var item_browser_attrs = {}; //item_browser_attrs.items = []; _Item$1.getItems({brand:brand}).then(function(items){ //item_browser_attrs.items = items; _Navigation.navigateTo(ItemBrowser, {items: items}); }); }},[ m('.card-header', [ m('.card-title.h3.text-center', brand) ]) ]) ]); } )) ]); }}; }; var DesignerCollectionsList = function(){ return {view: function(vnode){ var brands = _CollectionsList.designer_brands; return m('.container', [ m('.columns', [ m('.column.col-12', [ m('h1.text-center', 'Designer Collections') ]) ]), _User.isGuest() ? m('.columns', [m('.column.col-12', 'Please Sign-In to See Designer Brands')]) : m('.columns', brands.map(function(brand){ return m('.column.col-4.col-md-6.col-xs-12.mt-1', [ m('.card.c-hand', {onclick: function(e){ //var item_browser_attrs = {}; //item_browser_attrs.items = []; _Item$1.getItems({brand:brand}).then(function(items){ //item_browser_attrs.items = items; _Navigation.navigateTo(ItemBrowser, {items: items}); }); }},[ m('.card-header', [ m('.card-title.h3.text-center', brand) ]) ]) ]); } )) ]); }}; }; var _Equipment = {}; _Equipment.items = []; var Equipment = function(){ return { view: function(){ return m('.equipment', [ m('h1.text-center','Equipment'), m(ItemBrowser, {items: _Equipment.items}) ]); } }; }; var _Accessories = {}; _Accessories.items = []; var Accessories = function(){ return { view: function(){ return m('.equipment', [ m('h1.text-center','Accessories'), m(ItemBrowser, {items: _Accessories.items}) ]); } }; }; var _OpenOrders = {}; _OpenOrders.orders = []; _OpenOrders.getOpenOrders = function(){ return m.request({ method: 'POST', url: '/cgi/listopenorders', body: { session_hash: _User.session_hash } }) .then(function(res){ if(res.success === true){ if(!isArray(res.orders)){ res.orders = []; } _OpenOrders.orders = res.orders; _OpenOrders.orders.forEach(function(order){ order.user_id = _DB$1.integrate(order.user_id).id; _DB$1.integrate(order); }); return _OpenOrders.orders; } else{ res.errors.forEach(function(err){ _Message$1.addError("Error getting open Orders: "+err); }); } }); }; _OpenOrders.loadOrder = function(order){ return m.request({ method: 'POST', url: '/cgi/loadorder', body: { session_hash: _User.session_hash, order_id: order.id } }) .then(function(res){ if(res.success === true){ order = res.order; order.cart_id.lineitem_ids.forEach(function(lineitem){ lineitem.item_id = _DB$1.integrate(lineitem.item_id).id; }); _DB$1.integrateAllReturnIds(order.cart_id.lineitem_ids); // integrateAll modifies the Array in-place, so no need for '=' order.cart_id = _DB$1.integrate(order.cart_id).id; order = _DB$1.integrate(res.order); return order; } else{ res.errors.forEach(function(err){ _Message$1.addError("Error loading Order #"+order.id+": "+err); }); } }); }; var OrderView = function(){ return { view: function(vnode){ var order = vnode.attrs.order; var user = _DB$1.getRecord(order.user_id); var cart = _DB$1.getRecord(order.cart_id); var lineitems = cart.lineitem_ids.map(_DB$1.getRecord); var cart_total = 0; return m('.order-view', [ m('h1', [ 'Order #'+order.id, m('small', 'Ordered On: '+order.date_ordered) ]), m('p', user.store+' ('+user.firstname+' '+user.lastname+')'), ( order.status === 'open' ? m('button.btn.btn-primary',{onclick: function(e){ _DB$1.setProperty(order, 'status', 'closed'); }},'Close Order') : m('button.btn.btn-primary',{onclick: function(e){ _DB$1.setProperty(order, 'status', 'open'); }},'Re-open Order') ), m('.steps', [ m('ul.step', [ m('li.step-item'+(order.progress==='ordered'?'.active':''), [ m('a.tooltip', { href:'#', 'data-tooltip':'Customer Placed Order on '+order.date_ordered, onclick: function(e){ e.preventDefault(); e.stopPropagation(); _DB$1.setProperty(order, 'progress', 'ordered'); } }, 'Ordered') ]), m('li.step-item'+(order.progress==='picked'?'.active':''), [ m('a.tooltip', { href:'#', 'data-tooltip':'Piazza Picked the Order', onclick: function(e){ e.preventDefault(); e.stopPropagation(); _DB$1.setProperty(order, 'progress', 'picked'); } }, 'Picked') ]), m('li.step-item'+(order.progress==='shipped'?'.active':''), [ m('a.tooltip', { href:'#', 'data-tooltip':'Piazza Shipped the Order', onclick: function(e){ e.preventDefault(); e.stopPropagation(); _DB$1.setProperty(order, 'progress', 'shipped'); } }, 'Shipped') ]), m('li.step-item'+(order.progress==='paid'?'.active':''), [ m('a.tooltip', { href:'#', 'data-tooltip':'Customer Paid for the Order in Full', onclick: function(e){ e.preventDefault(); e.stopPropagation(); _DB$1.setProperty(order, 'progress', 'paid'); } }, 'Paid') ]) ]) ]), m('.items', [ m('table.table.table-striped.table-hover', [ m('thead', [ m('tr', [ m('th', 'Item'), m('th', 'Quantity'), m('th', 'Price'), m('th', 'Subtotal') ]) ]), m('tbody', lineitems.map(function(lineitem){ var subtotal = lineitem.quantity*lineitem.price; cart_total += subtotal; return m('tr', [ m('td', _DB$1.getRecord(lineitem.item_id).name), m('td', lineitem.quantity), m('td', '$'+lineitem.price), m('td', '$'+subtotal) ]); })) ]), m('h6', "Grand Total: $"+cart_total) ]) ]); } }; }; var OpenOrders = function(){ return { view: function(vnode){ return m('.open-orders', [ m('h2', 'Open Orders'), m('button.btn.refresh-application-button',{onclick: function(){ _OpenOrders.getOpenOrders(); }},[m('i.icon.icon-refresh'), 'Refresh']), m('.order-list', m('table.table.table-striped.table-hover', [ m('thead', [ m('tr', [ m('th', 'Customer'), m('th', 'Date Ordered'), m('th', 'Order Number') ]) ]), m('tbody', _OpenOrders.orders.map(function(order){ var user = _DB$1.getRecord(order.user_id); var company_name = user.store || 'No Company: User#'+user.id; var date_ordered = order.date_ordered; var order_number = order.id; return m('tr', {onclick: function(e){ e.stopPropagation(); _OpenOrders.loadOrder(order).then(function(order){ _Navigation.navigateTo(OrderView, {order: order}); }); }},[ m('td', company_name), m('td', date_ordered), m('td', order_number) ]) }) ) ]) ) ]); } }; }; var util = {}; util.remove = function(arr, el){ var i=0; while(arr[i] !== el){ i++; } arr.splice(i,1); }; var _Admin = {}; _Admin.page = OpenOrders; _Admin.open_applications = []; _Admin.getOpenApplications = function(){ return m.request({ method:'POST', url: '/cgi/listnewuserapplications', body: { session_hash: _User.session_hash } }) .then(function(res){ if(res.success === true){ _Admin.open_applications = res.open_applications; // the server encodes an empty set as an Object instead of Array, so we have to detect it: if(typeof _Admin.open_applications.length === 'undefined'){ _Admin.open_applications = []; } } }); }; _Admin.acceptApplication = function(a){ return m.request({ method:'POST', url: '/cgi/acceptnewuserapplication', body: { session_hash: _User.session_hash, application_id: a.id, password: a.password } }) .then(function(res){ if(res.success === true){ util.remove(_Admin.open_applications, a); // TODO: maybe get whole new list of open application IDs, instead of assuming the only change was this one. What if two admins are signed-on to two computers, each knocking-off open applications? } }); }; function ApplicationManager(ivnode){ return { view: function(vnode){ return m('.application-manager',[ m('h2', 'Open Applications'), m('button.btn.refresh-application-button',{onclick: function(){ _Admin.getOpenApplications(); }},[m('i.icon.icon-refresh'), 'Refresh']), m('ul.open-application-list', _Admin.open_applications.map(function(a){ return m('li', [ m('.name', a.salutation+' '+a.firstname+' '+a.lastname+ '('+a.position+' @ '+a.store+')'), m('.info', a.practice_type+' (Office: '+a.phone_office+', Cell: '+a.phone_cell+', Email: '+a.email+')'), m('.address', a.address), m('input[type=text][placeholder=Password].application',{ onchange: function(e){ a.password = e.target.value; }, value: a.password }), m('button.btn.btn-success.accept-application-button', {onclick: function(){ _Admin.acceptApplication(a); }}, 'Accept'), m('button.btn.btn-error.accept-application-button', {onclick: function(){ _Admin.declineApplication(a); }}, 'Decline') ]); })) ]); }}} var ItemChooser = function(){ var search_term = ''; var results = []; var chosen_item = null; return { view: function(vnode){ var onchoose = vnode.attrs.onchoose; return m('.item-search', [ m('input[type=text][placeholder=Model]', { onchange: function(e){ search_term = e.target.value; results = []; if(search_term !== ''){ _Item$1.searchByString(search_term) .then(function(res){ if(res.success === true){ if(isArray(res.results)){ // empty list comes back as `{}` from server instead of `[]` results = res.results; } else{ results = []; } } }); } }, value: search_term }), m('table.table.table-striped.table-hover.results', [ m('thead', [ m('tr', [ m('th', 'Brand'), m('th', 'Model'), m('th', 'Color') ]) ]), m('tbody', results.map(function(item){ var active_class = (chosen_item === item ? '.active' : ''); return m('tr'+active_class, { onclick: function(e){ e.stopPropagation(); chosen_item = item; onchoose(item); } },[ m('td', item.brand), m('td', item.model), m('td', item.color) ]) }) ) ] ) ]); } }; }; function isObject(x){ return (typeof x === 'object'); } function ItemImageController(ivnode){ return { view: function(vnode){ var item = vnode.attrs.item; if(item === null){ return m('.msg', 'No item chosen.'); } if(typeof item.image_ids === 'undefined'){ item.image_ids=[]; } var images = item.image_ids.map(function(image_id){ if(isObject(image_id)){ return image_id; } else{ return _DB$1.getRecord(image_id); } }); var no_images = (images.length === 0); return m('.item-image-controller.bg-secondary', { ondragover: function(e){ e.preventDefault(); }, ondrop: function(e){ e.preventDefault(); // don't open the file in the browser var files = []; // some browsers use `.items` and some use `.files`, so check for both: if (e.dataTransfer.items) { for (var i = 0; i < e.dataTransfer.items.length; i++) { if (e.dataTransfer.items[i].kind === 'file') { // If dropped items aren't files, reject them files.push( e.dataTransfer.items[i].getAsFile() ); } } } else { for (var i = 0; i < e.dataTransfer.files.length; i++) { files.push( e.dataTransfer.files[i] ); } } for(var i=0; i