123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406 |
- Ext.require([
- 'Ext.data.*',
- 'Ext.panel.Panel',
- 'Ext.layout.container.Card',
- 'Ext.tip.QuickTipManager'
- ]);
- Ext.define('Customer', {
- extend: 'Ext.data.Model',
- fields: [{
- name: 'id',
- type: 'int'
- }, 'name', 'phone'],
- associations: [{
- model: 'Order',
- type: 'hasMany',
- autoLoad: true
- }],
- proxy: {
- type: 'ajax',
- url: 'customer.php'
- }
- });
- Ext.define('Order', {
- extend: 'Ext.data.Model',
- fields: [{
- name: 'id',
- type: 'int'
- },{
- name: 'customer_id',
- type: 'int'
- },{
- name: 'date',
- type: 'date',
- dateFormat: 'Y-m-d'
- }],
- belongsTo: 'Customer',
- associations: [{
- model: 'OrderItem',
- type: 'hasMany',
- autoLoad: true
- }],
- proxy: {
- type: 'ajax',
- url: 'order.php'
- }
- });
- Ext.define('OrderItem', {
- extend: 'Ext.data.Model',
- fields: [{
- name: 'id',
- type: 'int'
- }, {
- name: 'order_id',
- type: 'int'
- },'product', {
- name: 'quantity',
- type: 'int'
- }, {
- name: 'price',
- type: 'float'
- }],
- belongsTo: 'Order',
- proxy: {
- type: 'ajax',
- url: 'orderitem.php'
- }
- });
- Ext.define('CustomerGrid', {
- extend: 'Ext.grid.Panel',
- alias: 'widget.customergrid',
-
- title: 'Customers',
-
- initComponent: function(){
- Ext.apply(this, {
- store: {
- autoLoad: true,
- model: 'Customer',
- listeners: {
- load: function() {
- Logger.log('Customer store loaded', false);
- }
- }
- },
- columns: [{
- text: 'Id',
- dataIndex: 'id'
- },{
- text: 'Name',
- dataIndex: 'name',
- flex: 1
- }, {
- text: 'Phone',
- dataIndex: 'phone'
- }],
- dockedItems: [{
- xtype: 'toolbar',
- items: {
- itemId: 'load',
- text: 'Load Orders',
- scope: this,
- handler: this.loadOrders,
- disabled: true
- }
- }]
- });
- this.callParent();
- this.getSelectionModel().on('selectionchange', this.onSelectChange, this);
- },
-
- onSelectChange: function(selModel, selections) {
- this.active = selections[0];
- this.down('#load').setDisabled(!this.active);
- },
-
- loadOrders: function(){
- var rec = this.active,
- name = rec.get('name'),
- owner = this.ownerCt,
- orders;
-
-
- orders = rec.orders();
- if (orders.isLoading()) {
- Logger.log('Begin loading orders: ' + rec.getId(), true);
- }
- orders.on('load', function(){
- Logger.log('Order store loaded - ' + rec.getId(), false);
- });
- owner.add({
- title: 'Orders - ' + rec.getId(),
- customer: rec,
- xtype: 'ordergrid',
- store: orders
- });
- owner.getLayout().next();
- }
- });
- Ext.define('OrderGrid', {
- extend: 'Ext.grid.Panel',
- alias: 'widget.ordergrid',
-
- initComponent: function(){
- Ext.apply(this, {
- columns: [{
- text: 'Id',
- dataIndex: 'id'
- },{
- flex: 1,
- text: 'Date',
- dataIndex: 'date',
- renderer: Ext.util.Format.dateRenderer('Y-m-d')
- }],
- dockedItems: [{
- xtype: 'toolbar',
- items: [{
- text: 'Back',
- scope: this,
- handler: this.onBackClick
- },{
- itemId: 'load',
- text: 'Load Order Items',
- scope: this,
- handler: this.loadItems,
- disabled: true
- }]
- }]
- });
- this.callParent();
- this.getSelectionModel().on('selectionchange', this.onSelectChange, this);
- },
-
- onBackClick: function(){
- this.ownerCt.getLayout().prev();
- this.destroy();
- },
-
- onSelectChange: function(selModel, selections) {
- this.active = selections[0];
- this.down('#load').setDisabled(!this.active);
- },
-
- loadItems: function(){
- var customerName = this.customer.get('name'),
- rec = this.active,
- date = Ext.Date.format(rec.get('date'), 'Y-m-d'),
- owner = this.ownerCt,
- orderitems;
-
- orderitems = rec.orderitems();
- if (orderitems.isLoading()) {
- Logger.log('Begin loading order items - ' + rec.getId(), true);
- }
- orderitems.on('load', function(){
- Logger.log('Order items loaded - ' + rec.getId(), false);
- });
- owner.add({
- title: 'Order Items - ' + rec.getId(),
- xtype: 'orderitemgrid',
- store: orderitems
- });
- owner.getLayout().next();
- }
- });
- Ext.define('OrderItemGrid', {
- extend: 'Ext.grid.Panel',
- alias: 'widget.orderitemgrid',
-
- initComponent: function(){
- Ext.apply(this, {
- columns: [{
- text: 'Id',
- dataIndex: 'id'
- },{
- flex: 1,
- text: 'Product',
- dataIndex: 'product'
- }, {
- text: 'Quantity',
- dataIndex: 'quantity'
- }, {
- text: 'Price',
- dataIndex: 'price',
- renderer: Ext.util.Format.usMoney
- }],
- dockedItems: [{
- xtype: 'toolbar',
- items: [{
- text: 'Back',
- scope: this,
- handler: this.onBackClick
- }, {
- itemId: 'load',
- text: 'Parent association loader',
- tooltip: 'Demonstrate loading parent relationships - A new record will be created so we ignore any previous associations setup',
- scope: this,
- handler: this.onLoadClick,
- disabled: true
- }]
- }]
- });
- this.callParent();
- this.getSelectionModel().on('selectionchange', this.onSelectChange, this);
- },
-
- onSelectChange: function(selModel, selections) {
- this.active = selections[0];
- this.down('#load').setDisabled(!this.active);
- },
-
- onBackClick: function(){
- this.ownerCt.getLayout().prev();
- this.destroy();
- },
-
- onLoadClick: function(){
- var rec = this.active,
- id = rec.getId();
-
- new ItemLoader({
- width: 400,
- height: 400,
- modal: true,
- title: this.title.replace('Order Items', 'Order Item ' + id),
- orderItemData: rec.data,
- orderItemId: id
- }).show();
- }
- });
- Ext.define('ItemLoader', {
- extend: 'Ext.window.Window',
-
- initComponent: function(){
- Ext.apply(this, {
- border: false,
- autoScroll: true,
- dockedItems: [{
- xtype: 'toolbar',
- items: [{
- text: 'Print order detail',
- scope: this,
- handler: this.onOrderClick
- }, {
- itemId: 'company',
- text: 'Print company detail',
- disabled: true,
- scope: this,
- handler: this.onCompanyClick
- }]
- }],
- bodyPadding: 5,
- tpl: '<div>{type} {id} - {value}</div>',
- tplWriteMode: 'append'
- });
- this.callParent();
- this.orderItem = new OrderItem(this.orderItemData, this.orderItemId);
- },
-
- onOrderClick: function(){
- var id = this.orderItem.get('order_id'),
- hasOrder = !!this.order;
-
- if (!hasOrder) {
- Logger.log('Begin loading order - ' + id, true);
- }
- this.orderItem.getOrder({
- scope: this,
- success: function(order){
- this.order = order;
- this.down('#company').enable();
- if (!hasOrder) {
- Logger.log('Order loaded - ' + id, false);
- }
- this.update({
- type: 'Order',
- id: order.getId(),
- value: Ext.Date.format(order.get('date'), 'Y-m-d')
- });
- }
- });
- },
-
- onCompanyClick: function(){
- var id = this.order.get('customer_id'),
- hasCustomer = !!this.customer;
-
- if (!hasCustomer) {
- Logger.log('Begin loading customer - ' + id, true);
- }
- this.order.getCustomer({
- scope: this,
- success: function(customer){
- this.customer = customer;
- if (!hasCustomer) {
- Logger.log('Customer loaded - ' + id, false);
- }
- this.update({
- type: 'Customer',
- id: customer.getId(),
- value: customer.get('name')
- });
- }
- });
- }
- });
- Logger = (function(){
- var panel;
-
- return {
- init: function(log){
- panel = log;
- },
-
- log: function(msg, isStart){
- panel.update({
- now: new Date(),
- cls: isStart ? 'beforeload' : 'afterload',
- msg: msg
- });
- panel.body.scroll('b', 100000, true);
- }
- };
- })();
- Ext.onReady(function(){
-
- var main = Ext.create('Ext.panel.Panel', {
- renderTo: document.body,
- width: 750,
- height: 400,
- border: false,
- layout: {
- type: 'vbox',
- align: 'stretch'
- },
- items: [{
- height: 200,
- xtype: 'container',
- layout: 'card',
- margin: '0 0 5 0'
- }, {
- flex: 1,
- title: 'Loader log',
- tplWriteMode: 'append',
- tpl: '<div class="{cls}">[{now:date("H:i:s")}] - {msg}</div>',
- bodyPadding: 5,
- autoScroll: true,
- listeners: {
- render: Logger.init
- }
- }]
- });
- Logger.log('Begin loading customer store', true);
- main.items.first().add({
- xtype: 'customergrid'
- });
-
- });
|