@@ -47,23 +47,26 @@ var dlv = {
4747 }
4848
4949 // (D3) ATTACH CUSTOMER AUTOCOMPLETE
50- autocomplete . attach ( {
51- target : document . getElementById ( "d-name" ) ,
52- mod : "autocomplete" , act : "cus" ,
53- data : { more : 1 } ,
54- onpick : cus => {
55- document . getElementById ( "d-name" ) . value = cus . n ;
56- cus . v = JSON . parse ( cus . v ) ;
57- [
58- [ "d-tel" , "t" ] ,
59- [ "d-email" , "e" ] ,
60- [ "d-address" , "a" ] ,
61- ] . forEach ( r => {
62- let field = document . getElementById ( r [ 0 ] ) ;
63- if ( field . value == "" ) { field . value = cus . v [ r [ 1 ] ] ; }
64- } ) ;
65- }
66- } ) ;
50+ var hcusname = document . getElementById ( "cus-name" ) ;
51+ if ( ! hcusname . disabled ) {
52+ autocomplete . attach ( {
53+ target : hcusname ,
54+ mod : "autocomplete" , act : "cus" ,
55+ data : { more : 1 } ,
56+ onpick : cus => {
57+ dlv . ccus ( false ) ;
58+ hcusname . value = cus . n ;
59+ cus . v = JSON . parse ( cus . v ) ;
60+ [
61+ [ "cus-id" , "i" ] ,
62+ [ "d-name" , "n" ] ,
63+ [ "d-tel" , "t" ] ,
64+ [ "d-email" , "e" ] ,
65+ [ "d-address" , "a" ] ,
66+ ] . forEach ( r => document . getElementById ( r [ 0 ] ) . value = cus . v [ r [ 1 ] ] ) ;
67+ }
68+ } ) ;
69+ }
6770
6871 // (D4) ATTACH ADD ITEM AUTOCOMPLETE
6972 autocomplete . attach ( {
@@ -88,16 +91,34 @@ var dlv = {
8891 }
8992 } ) ,
9093
91- // (E) ADD ITEM ROW
94+ // (E) TOGGLE CUSTOMER CHANGE
95+ ccus : reset => {
96+ // (E1) GET HTML ELEMENTS
97+ let n = document . getElementById ( "cus-name" ) ,
98+ i = document . getElementById ( "cus-id" ) ,
99+ c = document . getElementById ( "cus-change" ) ;
100+ // @TODO
101+ if ( reset ) {
102+ n . value = "" ;
103+ n . disabled = false ;
104+ i . value = "" ;
105+ c . classList . add ( "d-none" ) ;
106+ } else {
107+ n . disabled = true ;
108+ c . classList . remove ( "d-none" ) ;
109+ }
110+ } ,
111+
112+ // (F) ADD ITEM ROW
92113 addItem : ( sku , name , unit , price , qty ) => {
93- // (E1 ) CHECK DUPLICATE ITEM
114+ // (F1 ) CHECK DUPLICATE ITEM
94115 if ( dlv . iList [ sku ] ) {
95116 cb . modal ( "Already Added" , `[${ sku } ] ${ name } is already added.` ) ;
96117 }
97118
98- // (E2 ) ADD NEW ROW
119+ // (F2 ) ADD NEW ROW
99120 else {
100- // (E2 -1) ITEM ROW HTML
121+ // (F2 -1) ITEM ROW HTML
101122 let row = document . createElement ( "div" ) ;
102123 row . className = "iRow d-flex align-items-center border p-2" ;
103124 row . innerHTML =
@@ -115,30 +136,30 @@ var dlv = {
115136 <label>PRICE</label>
116137 </div>` ;
117138
118- // (E2 -2) SORTABLE
139+ // (F2 -2) SORTABLE
119140 row . draggable = true ;
120141 row . ondragstart = ( ) => dlv . ddfrom = row ;
121142 row . ondragover = e => e . preventDefault ( ) ;
122143 row . ondrop = dlv . isort ;
123144
124- // (E2 -3) APPEND TO LIST
145+ // (F2 -3) APPEND TO LIST
125146 document . getElementById ( "dlv-items" ) . appendChild ( row ) ;
126147 dlv . iList [ sku ] = 1 ;
127148 }
128149 } ,
129150
130- // (F ) DRAG-N-DROP SORT ITEM
151+ // (G ) DRAG-N-DROP SORT ITEM
131152 ddfrom : null , // current item being dragged
132153 ddto : null , // dropped at this item
133154 ddget : r => r . classList . contains ( "iRow" ) ? r : dlv . ddget ( r . parentElement ) , // get proper drop target
134155 isort : e => {
135- // (F1 ) GET ELEMENTS
156+ // (G1 ) GET ELEMENTS
136157 e . preventDefault ( ) ;
137158 let iList = document . getElementById ( "dlv-items" ) ,
138159 iAll = iList . querySelectorAll ( ".iRow" ) ;
139160 dlv . ddto = dlv . ddget ( e . target ) ;
140161
141- // (F2 ) REORDER ITEM
162+ // (G2 ) REORDER ITEM
142163 if ( iAll . length > 1 && dlv . ddfrom != dlv . ddto ) {
143164 let currentpos = 0 , droppedpos = 0 ;
144165 for ( let i = 0 ; i < iAll . length ; i ++ ) {
@@ -153,55 +174,60 @@ var dlv = {
153174 }
154175 } ,
155176
156- // (G ) REMOVE ITEM ROW
177+ // (H ) REMOVE ITEM ROW
157178 delItem : ( row , sku ) => {
158179 row . parentElement . remove ( ) ;
159180 delete dlv . iList [ sku ] ;
160181 } ,
161182
162- // (H ) GET ITEM FROM SERVER & ADD TO LIST
183+ // (I ) GET ITEM FROM SERVER & ADD TO LIST
163184 addGet : sku => cb . api ( {
164185 mod : "items" , act : "get" ,
165186 data : { sku : sku } ,
166187 passmsg : false ,
167188 onpass : res => {
168- // (H1 ) INVALID SKU
189+ // (I1 ) INVALID SKU
169190 if ( res . data == null ) {
170191 cb . modal ( "Invalid Item" , `${ sku } is not found in the database.` ) ;
171192 }
172193
173- // (H2 ) OK - ADD ITEM
194+ // (I2 ) OK - ADD ITEM
174195 else {
175196 let i = res . data ;
176197 dlv . addItem ( i . item_sku , i . item_name , i . item_unit , i . item_price , 1 ) ;
177198 }
178199 }
179200 } ) ,
180201
181- // (I ) ADD ITEM WITH QR CODE
202+ // (J ) ADD ITEM WITH QR CODE
182203 addQR : ( ) => {
183204 if ( qrscan . scanner == null ) { qrscan . init ( dlv . addGet ) ; }
184205 qrscan . show ( ) ;
185206 } ,
186207
187- // (J ) SAVE DELIVERY
208+ // (K ) SAVE DELIVERY
188209 save : ( ) => {
189- // (J1 ) GET DATA
210+ // (K1 ) GET DATA
190211 var data = {
212+ cid : document . getElementById ( "cus-id" ) . value ,
191213 name : document . getElementById ( "d-name" ) . value ,
192214 tel : document . getElementById ( "d-tel" ) . value ,
193215 email : document . getElementById ( "d-email" ) . value ,
194216 address : document . getElementById ( "d-address" ) . value ,
195217 date : document . getElementById ( "d-date" ) . value ,
196218 notes : document . getElementById ( "d-notes" ) . value
197219 } ;
220+ if ( data . cid == "" ) {
221+ cb . modal ( "No customer specified" , "Please select a customer." ) ;
222+ return false ;
223+ }
198224 var id = document . getElementById ( "d-id" ) . value ;
199225 if ( id != "" ) {
200226 data . id = id ;
201227 data . stat = document . getElementById ( "d-stat" ) . value ;
202228 }
203229
204- // (J2 ) GET ITEMS
230+ // (K2 ) GET ITEMS
205231 let items = document . querySelectorAll ( "#dlv-items .iRow" ) ;
206232 if ( items . length == 0 ) {
207233 cb . modal ( "No Items" , "Please add at least one item." ) ;
@@ -218,7 +244,7 @@ var dlv = {
218244 }
219245 data . items = JSON . stringify ( data . items ) ;
220246
221- // (J3 ) AJAX
247+ // (K3 ) AJAX
222248 cb . api ( {
223249 mod : "delivery" , act : "save" ,
224250 data : data ,
@@ -228,22 +254,22 @@ var dlv = {
228254 return false ;
229255 } ,
230256
231- // (K ) PRINT DELIVERY ORDER
257+ // (L ) PRINT DELIVERY ORDER
232258 print : id => {
233259 document . getElementById ( "dlv-print-id" ) . value = id ;
234260 document . getElementById ( "dlv-print" ) . submit ( ) ;
235261 }
236262} ;
237263
238- // (L ) INIT MANAGE DELIVERIES
264+ // (M ) INIT MANAGE DELIVERIES
239265window . addEventListener ( "load" , ( ) => {
240- // (L1 ) EXTRA STYLES FOR "ADD/EDIT ITEMS LIST"
266+ // (M1 ) EXTRA STYLES FOR "ADD/EDIT ITEMS LIST"
241267 document . head . appendChild ( document . createElement ( "style" ) ) . innerHTML = ".iQty,.iPrice{width:80px}" ;
242268
243- // (L2 ) LIST DELIVERIES
269+ // (M2 ) LIST DELIVERIES
244270 dlv . list ( ) ;
245271
246- // (L3 ) ATTACH AUTOCOMPLETE
272+ // (M3 ) ATTACH AUTOCOMPLETE
247273 autocomplete . attach ( {
248274 target : document . getElementById ( "dlv-search" ) ,
249275 mod : "autocomplete" , act : "deliver" ,
0 commit comments