Typica is a free program for professional coffee roasters. https://typica.us
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

purchase2.xml 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <window id="purchase">
  2. <layout type="vertical">
  3. <layout type="horizontal">
  4. <label>Date:</label>
  5. <calendar id="date" />
  6. <label>Vendor:</label>
  7. <sqldrop data="0" display="0" showdata="false" editable="true" id="vendor">
  8. <query>SELECT DISTINCT vendor FROM purchase UNION SELECT '' ORDER BY vendor ASC</query>
  9. </sqldrop>
  10. <label>Invoice:</label>
  11. <line id="invoice" />
  12. <stretch />
  13. </layout>
  14. <layout type="stack" id="pages">
  15. <page>
  16. <layout type="vertical">
  17. <sqltablearray columns="15" id="orderdetails" editable="false" selectionBehavior="rows">
  18. <column name="ID" />
  19. <column name="Bags" />
  20. <column name="Name" />
  21. <column name="Cost" />
  22. <column name="Bag Weight" />
  23. <column name="Total Cost" />
  24. <column name="Certifications" />
  25. <column name="Attributes" />
  26. <column name="Type" />
  27. <column name="Update" />
  28. <column name="Old Name" />
  29. <column name="Old Cost" />
  30. <column name="Origin" />
  31. <column name="Decaf" />
  32. <column name="Decaf Method" />
  33. </sqltablearray>
  34. </layout>
  35. </page>
  36. <page>
  37. <layout type="horizontal">
  38. <stretch />
  39. <layout type="vertical">
  40. <stretch />
  41. <button name="New Item" type="push" id="newItem" />
  42. <button name="New Fee" type="push" id="newFee" />
  43. <button name="Cancel" type="push" id="newCancel" />
  44. <stretch />
  45. </layout>
  46. <stretch />
  47. </layout>
  48. </page>
  49. <page>
  50. <layout type="vertical">
  51. <tabbar id="tabs" />
  52. <layout type="stack" id="itemStack">
  53. <page>
  54. <layout type="form">
  55. <row label="Number of Bags">
  56. <line id="itemBags" validator="numeric" />
  57. </row>
  58. <row label="Item Name">
  59. <sqldrop data="0" display="0" showdata="false" editable="true" id="itemName">
  60. <query>SELECT DISTINCT name FROM coffees UNION SELECT '' ORDER BY name ASC</query>
  61. </sqldrop>
  62. </row>
  63. <row label="Origin">
  64. <sqldrop data="0" display="0" showdata="false" editable="true" id="itemOrigin">
  65. <query>SELECT DISTINCT origin FROM coffees UNION SELECT '' ORDER BY origin ASC</query>
  66. </sqldrop>
  67. </row>
  68. <row label="Quantity">
  69. <layout type="horizontal">
  70. <line id="itemQuantity" validator="numeric" />
  71. <sqldrop id="units" />
  72. <sqldrop id="quantityDivision" />
  73. </layout>
  74. </row>
  75. <row label="Cost">
  76. <layout type="horizontal">
  77. <line id="itemCost" validator="numeric" />
  78. <sqldrop id="costDivision" />
  79. </layout>
  80. </row>
  81. <row label="Decaffeination">
  82. <layout type="horizontal">
  83. <button type="check" id="isDecaf" name="Decaffeinated" />
  84. <label>Decaffeination Method</label>
  85. <sqldrop data="0" display="0" showdata="false" editable="true" id="decafMethod">
  86. <query>SELECT DISTINCT decaf_method FROM decaf_coffees UNION SELECT '' ORDER BY decaf_method ASC</query>
  87. </sqldrop>
  88. </layout>
  89. </row>
  90. </layout>
  91. </page>
  92. <page>
  93. <layout type="vertical">
  94. <sqltablearray columns="1" id="itemCertifications">
  95. <column name="Certification" delegate="sql" showdata="false" data="0" display="0" editable="true">SELECT DISTINCT certification FROM certifications UNION SELECT '' ORDER BY certification ASC</column>
  96. </sqltablearray>
  97. </layout>
  98. </page>
  99. <page>
  100. <layout type="vertical">
  101. <sqltablearray columns="2" id="itemAttributes">
  102. <column name="Attribute" delegate="sql" showdata="false" data="0" display="0">SELECT DISTINCT name FROM item_attributes UNION SELECT '' ORDER BY name ASC</column>
  103. <column name="Value" />
  104. </sqltablearray>
  105. </layout>
  106. </page>
  107. </layout>
  108. <layout type="horizontal">
  109. <button name="Cancel" type="push" id="itemCancel" />
  110. <button name="Delete" type="push" id="itemDelete" />
  111. <stretch />
  112. <button name="Save" type="push" id="itemSave" />
  113. </layout>
  114. </layout>
  115. </page>
  116. <page>
  117. <layout type="horizontal">
  118. <stretch />
  119. <layout type="vertical">
  120. <stretch />
  121. <layout type="form">
  122. <row label="Description: ">
  123. <line id="feeDescription" />
  124. </row>
  125. <row label="Price: ">
  126. <line id="feePrice" />
  127. </row>
  128. </layout>
  129. <stretch />
  130. <layout type="horizontal">
  131. <button name="Cancel" type="push" id="feeCancel" />
  132. <button name="Delete" type="push" id="feeDelete" />
  133. <stretch />
  134. <button name="Save" type="push" id="feeSave" />
  135. </layout>
  136. <stretch />
  137. </layout>
  138. <stretch />
  139. </layout>
  140. </page>
  141. </layout>
  142. <stretch />
  143. </layout>
  144. <program>
  145. <![CDATA[
  146. var window = this;
  147. this.windowTitle = TTR("purchase", "Typica - Coffee Purchase");
  148. var pages = findChildObject(this, 'pages');
  149. pages.setCurrentIndex(0);
  150. var table = findChildObject(this, 'orderdetails');
  151. // table.hideColumn(6);
  152. table.hideColumn(7);
  153. table.hideColumn(8);
  154. table.hideColumn(9);
  155. table.hideColumn(10);
  156. table.hideColumn(11);
  157. table.hideColumn(12);
  158. table.hideColumn(13);
  159. table.hideColumn(14);
  160. table.resizeColumnsToContents();
  161. var units = findChildObject(this, 'units');
  162. units.addItem("Lb");
  163. units.addItem("Kg");
  164. var quantityDivision = findChildObject(this, 'quantityDivision');
  165. quantityDivision.addItem("Total");
  166. quantityDivision.addItem("Per Bag");
  167. var costDivision = findChildObject(this, 'costDivision');
  168. costDivision.addItem("Total");
  169. costDivision.addItem("Per Unit");
  170. var isDecaf = findChildObject(this, 'isDecaf');
  171. var decafMethod = findChildObject(this, 'decafMethod');
  172. var itemCertifications = findChildObject(this, 'itemCertifications');
  173. var itemAttributes = findChildObject(this, 'itemAttributes');
  174. var currentRow;
  175. table.doubleClicked.connect(function(index) {
  176. currentRow = index.row();
  177. var type = table.data(currentRow, 8, 0);
  178. if(type == "PURCHASE") {
  179. loadItemPage();
  180. } else if(type == "FEE") {
  181. loadFeePage();
  182. } else {
  183. pages.setCurrentIndex(1);
  184. }
  185. });
  186. var tabs = findChildObject(this, 'tabs');
  187. tabs.addTab(TTR("purchase", "Required Details"));
  188. tabs.addTab(TTR("purchase", "Certifications"));
  189. tabs.addTab(TTR("purchase", "Attributes"));
  190. var itemStack = findChildObject(this, 'itemStack');
  191. tabs.currentChanged.connect(function(index) {
  192. itemStack.setCurrentIndex(index);
  193. });
  194. function loadItemPage() {
  195. pages.setCurrentIndex(2);
  196. }
  197. var newItem = findChildObject(this, 'newItem');
  198. newItem.clicked.connect(function() {
  199. pages.setCurrentIndex(2);
  200. });
  201. var itemBags = findChildObject(this, 'itemBags');
  202. var itemName = findChildObject(this, 'itemName');
  203. var itemOrigin = findChildObject(this, 'itemOrigin');
  204. var itemQuantity = findChildObject(this, 'itemQuantity');
  205. var itemCost = findChildObject(this, 'itemCost');
  206. var itemSave = findChildObject(this, 'itemSave');
  207. function itemClear() {
  208. itemBags.text = '';
  209. itemName.currentText = '';
  210. itemOrigin.currentText = '';
  211. itemCost.text = '';
  212. itemQuantity.text = '';
  213. pages.setCurrentIndex(0);
  214. }
  215. var itemCancel = findChildObject(this, 'itemCancel');
  216. itemCancel.clicked.connect(function() {
  217. itemClear();
  218. });
  219. itemSave.clicked.connect(function() {
  220. if(table.data(currentRow, 9, 0) == "NOP") {
  221. table.setData(currentRow, 0, "UPDATE", 0);
  222. } else {
  223. table.setData(currentRow, 9, "INSERT", 0);
  224. }
  225. table.setData(currentRow, 8, "PURCHASE", 0);
  226. table.setData(currentRow, 1, itemBags.text, 0);
  227. table.setData(currentRow, 2, itemName.currentText, 0);
  228. table.setData(currentRow, 12, itemOrigin.currentText, 0);
  229. var factor = 1;
  230. if(units.currentIndex == 1) {
  231. factor = 2.2;
  232. }
  233. if(costDivision.currentIndex == 1) {
  234. table.setData(currentRow, 3, Number(itemCost.text)/factor, 0);
  235. } else {
  236. if(quantityDivision.currentIndex == 0) {
  237. table.setData(currentRow, 3, Number(itemCost.text)/Number(itemQuantity.text)/factor, 0);
  238. } else {
  239. table.setData(currentRow, 3, Number(itemCost.text)/(Number(itemQuantity.text)*Number(itemBags.text))/factor, 0);
  240. }
  241. }
  242. if(quantityDivision.currentIndex == 1) {
  243. table.setData(currentRow, 4, Number(itemQuantity.text)/factor, 0);
  244. } else {
  245. table.setData(currentRow, 4, Number(itemQuantity.text)/Number(itemBags.text)/factor, 0);
  246. }
  247. table.setData(currentRow, 5, Number(table.data(currentRow, 1, 0)) * Number(table.data(currentRow, 3, 0)) * Number(table.data(currentRow, 4, 0)));
  248. if(isDecaf.checked) {
  249. table.setData(currentRow, 13, "true", 0);
  250. table.setData(currentRow, 14, decafMethod.currentText, 0);
  251. } else {
  252. table.setData(currentRow, 13, "false", 0);
  253. }
  254. if(itemCertifications.model().rowCount() > 1) {
  255. table.setData(currentRow, 6, itemCertifications.quotedColumnArray(0, 0), 0);
  256. }
  257. itemClear();
  258. });
  259. var newCancel = findChildObject(this, 'newCancel');
  260. newCancel.clicked.connect(function() {
  261. pages.setCurrentIndex(0);
  262. });
  263. var newFee = findChildObject(this, 'newFee');
  264. newFee.clicked.connect(function() {
  265. pages.setCurrentIndex(3);
  266. });
  267. var feeCancel = findChildObject(this, 'feeCancel');
  268. feeCancel.clicked.connect(function() {
  269. clearFeePage();
  270. });
  271. var feeDescription = findChildObject(this, 'feeDescription');
  272. var feePrice = findChildObject(this, 'feePrice');
  273. var feeSave = findChildObject(this, 'feeSave');
  274. feeSave.clicked.connect(function() {
  275. if(table.data(currentRow, 9, 0) == "NOP") {
  276. table.setData(currentRow, 10, table.data(currentRow, 2, 0));
  277. table.setData(currentRow, 11, table.data(currentRow, 5, 0));
  278. table.setData(currentRow, 0, "UPDATE", 0);
  279. } else {
  280. table.setData(currentRow, 9, "INSERT", 0);
  281. }
  282. table.setData(currentRow, 2, feeDescription.text, 0);
  283. table.setData(currentRow, 3, feePrice.text, 0);
  284. table.setData(currentRow, 5, feePrice.text, 0);
  285. table.setData(currentRow, 8, "FEE", 0);
  286. clearFeePage();
  287. });
  288. function clearFeePage() {
  289. feeDescription.text = "";
  290. feePrice.text = "";
  291. table.resizeColumnsToContents();
  292. pages.setCurrentIndex(0);
  293. }
  294. function loadFeePage() {
  295. feeDescription.text = table.data(currentRow, 2, 0);
  296. feePrice.text = table.data(currentRow, 5, 0);
  297. pages.setCurrentIndex(3);
  298. }
  299. var feeDelete = findChildObject(this, 'feeDelete');
  300. feeDelete.clicked.connect(function() {
  301. if(table.data(currentRow, 9, 0) == "INSERT") {
  302. table.removeRow(currentRow);
  303. } else if(table.data(currentRow, 9, 0) == "UPDATE") {
  304. table.setData(currentRow, 9, "DELETE", 0);
  305. table.hideRow(currentRow);
  306. } else if(table.data(currentRow, 9, 0) == "NOP") {
  307. table.setData(currentRow, 9, "DELETE", 0);
  308. table.hideRow(currentRow);
  309. }
  310. clearFeePage();
  311. });
  312. ]]>
  313. </program>
  314. </window>