Advertisement
Guest User

Untitled

a guest
May 26th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 57.10 KB | None | 0 0
  1. var exports = module.exports = {};
  2. var sqlite3 = require('sqlite3').verbose();
  3. const path = require('path');
  4. const dbPath = path.resolve(__dirname, '../mainDB/iMSN_Database.db');
  5. var DateDiff = require('date-diff');
  6. var crypto = require('crypto');
  7. var fs = require('fs');
  8.  
  9. openConnection = function () {
  10. return new sqlite3.Database(dbPath);
  11. }
  12.  
  13. exports.login = function (user, pass, callback) {
  14. var db = openConnection();
  15.  
  16. pass = getSHA1(pass);
  17.  
  18. sql = "SELECT u.ID as ID, u.PaymentType, at.Title as Type, u.ActivationDate as Datum from User as u join AccountType as at on u.AccountTypeID=at.ID where u.Username=? and u.Password=?";
  19. db.all(sql,[user.toLowerCase(),pass], function (err, rows) {
  20.  
  21. if (err) {
  22. callback(false, false);
  23. }
  24. else {
  25. if (rows.length == 0) {
  26. sql = "SELECT ID from PendingOwner where Username=? and Password=?";
  27. db.all(sql,[user.toLowerCase(),pass], function (err1, rows1) {
  28. destroy(db);
  29. if (err1) {
  30. callback(false, false)
  31. }
  32. else {
  33. if (rows1.length == 0)
  34. callback(false, false);
  35. else {
  36. callback(false, true);
  37. }
  38. }
  39. });
  40. }
  41. else {
  42. destroy(db);
  43. var now = new Date();
  44. var datum = new Date(rows[0].Datum);
  45. if (((new DateDiff(now, datum)).months()) - 12 >= 0)
  46. callback(rows[0].ID, rows[0].Type, false);
  47. else
  48. callback(rows[0].ID, rows[0].Type, true);
  49. }
  50. }
  51. });
  52. }
  53.  
  54. exports.usersForValidation = function (callback) {
  55. var db = openConnection();
  56.  
  57. sql = "SELECT Fname, Lname, ID, URL, `E-mail` as email, Username, Phone, PaymentType FROM PendingOwner WHERE URL IS NOT NULL";
  58.  
  59. db.all(sql, function (err, rows) {
  60. destroy(db);
  61.  
  62. if (err) {
  63. callback(false);
  64. }
  65. else {
  66. callback(JSON.stringify(rows));
  67. }
  68. });
  69. }
  70.  
  71. exports.moveUser = function (ID) {
  72. var db = openConnection();
  73.  
  74. sql = "SELECT Fname, Lname, Username, Password, `E-mail` as email, Phone, URL, PaymentType FROM PendingOwner WHERE ID=?";
  75.  
  76. db.all(sql,[ID], function (err, rows) {
  77. var row = rows[0];
  78. fs.unlink(__dirname + "/../public" + row.URL, function () { });
  79. sql = "select * from User where Username=?";
  80.  
  81. db.all(sql,[row.Username.toLowerCase()], function (err, rows1) {
  82. if (rows1.length > 0) {
  83.  
  84. sql = "Update User SET ActivationDate='" + new Date() + "' where Username=?";
  85. db.run(sql,[row.Username.toLowerCase()], function () {
  86. destroy(db);
  87. });
  88. }
  89. else {
  90. sql = "INSERT INTO User(Fname,Lname,Username,Password,`E-mail` ,Phone, AccountTypeID,ActivationDate, PaymentType) VALUES (?,?,?,?,?,?,3,'" + new Date() + "',?)";
  91. db.run(sql,[row.Fname,row.Lname,row.Username.toLowerCase(),row.Password,row.email,row.Phone,row.PaymentType], function () {
  92. sql = "DELETE FROM PendingOwner WHERE ID=?";
  93. db.run(sql,[ID], function () {
  94. destroy(db);
  95. });
  96. });
  97. }
  98. });
  99. });
  100. }
  101.  
  102.  
  103. exports.deleteUser = function (ID) {
  104. var db = openConnection();
  105. sql = "SELECT Fname, Lname, Username, Password, `E-mail` as email, Phone, URL FROM PendingOwner WHERE ID=?";
  106.  
  107. db.all(sql,[ID], function (err, rows) {
  108. fs.unlink(__dirname + "/../public" + rows[0].URL, function () { });
  109.  
  110. sql = "DELETE FROM PendingOwner WHERE ID=?";
  111. db.run(sql,[ID], function () {
  112. destroy(db);
  113. });
  114. });
  115.  
  116. }
  117. exports.getUser = function (ID, callback) {
  118. var db = openConnection();
  119. sql = "SELECT *, `E-mail` as email FROM User WHERE ID=?";
  120.  
  121. db.all(sql,[ID], function (err, rows) {
  122. destroy(db);
  123. callback(rows[0]);
  124. });
  125.  
  126. }
  127. exports.changeUser = function (user, callback) {
  128. var db = openConnection();
  129. sql = "SELECT ID from User where Username=? and ID!=? UNION Select ID from PendingOwner where Username=?";
  130. db.all(sql,[user.username.toLowerCase(),user.ID,user.username], function (err, rows) {
  131. if (!err) {
  132. if (rows.length > 0) {
  133. destroy(db);
  134. console.log("dada");
  135. callback(false);
  136. }
  137. else {
  138. var arr = [];
  139. if (user.password == "") {
  140. sql = "Update User SET Username=?, Fname=?, Lname=?, Phone=?, `E-mail`=? WHERE ID=?";
  141. arr.push(user.username.toLowerCase());
  142. arr.push(user.fname);
  143. arr.push(user.lname);
  144. arr.push(user.phone);
  145. arr.push(user.email);
  146. arr.push(user.ID);
  147. }
  148. else {
  149. var pass = getSHA1(user.password);
  150. sql = "Update User SET Password=? WHERE ID=?";
  151. arr.push(pass);
  152. arr.push(user.ID);
  153. }
  154. db.run(sql,arr, function (err) {
  155. console.log(err);
  156. destroy(db);
  157. callback(true);
  158. });
  159. }
  160. }
  161. });
  162. }
  163. exports.insertRegisteredUser = function (user, callback) {
  164. var db = openConnection();
  165. console.log("USER:", user);
  166. if (user.paid && user.accType == undefined) {
  167. sql = "SELECT ID from User where Username=?";
  168. db.all(sql,[user.username.toLowerCase()], function (err, rows) {
  169. if (!err) {
  170. if (rows.length > 0) {
  171. destroy(db);
  172. callback(false);
  173. }
  174. else {
  175. sql = "SELECT ID from PendingOwner where Username=?";
  176. db.all(sql,[user.username.toLowerCase()], function (err1, rows1) {
  177. if (!err1) {
  178. if (rows1.length > 0) {
  179. destroy(db);
  180. callback(false);
  181. }
  182. else {
  183. sql = "INSERT INTO PendingOwner(Fname,Lname,Username,Password,`E-mail` ,Phone, PaymentType) VALUES (?,?,?,?,?,?,?)";
  184. db.run(sql,[user.fname,user.lname,user.username.toLowerCase(),getSHA1(user.password),user.email,user.phone,user.PaymentType], function () {
  185. destroy(db);
  186. callback(true);
  187. });
  188.  
  189. }
  190. }
  191. });
  192. }
  193. }
  194. });
  195. }
  196. else {
  197. sql = "SELECT ID from User where Username=?";
  198. db.all(sql,[user.username.toLowerCase()], function (err, rows) {
  199. if (rows.length > 0) {
  200. destroy(db);
  201. callback(false);
  202. }
  203. else {
  204. sql = "INSERT INTO User(Fname,Lname,Username,Password,`E-mail` ,Phone, AccountTypeID, ActivationDate, PaymentType) VALUES (?,?,?,?,?,?,?,'" + new Date(Date.now()) + "',null)";
  205. db.run(sql,[user.fname,user.lname,user.username.toLowerCase(),getSHA1(user.password),user.email,user.phone,user.accType], function () {
  206. destroy(db);
  207. callback(true);
  208. });
  209. }
  210. });
  211. }
  212. }
  213.  
  214. exports.getAllTickets = function (callback) {
  215. var db = openConnection();
  216.  
  217. sql = 'select u.Fname || " " || u.Lname as fullName, u.PaymentType,s.ID,S.Date as date,s.Text as text from SupportTicket s join User u on u.ID=s.UserID';
  218.  
  219. db.all(sql, function (err, rows) {
  220. destroy(db);
  221.  
  222. if (err) {
  223. callback(false);
  224. }
  225. else {
  226. callback(JSON.stringify(rows));
  227. }
  228. });
  229. }
  230.  
  231. exports.deleteSupportTicket = function (ID) {
  232. var db = openConnection();
  233. sql = "DELETE FROM SupportTicket WHERE ID=?";
  234. db.run(sql,[ID], function () {
  235. destroy(db);
  236. });
  237. }
  238.  
  239. exports.addMobileNotifications = function(all,callback){
  240. var db = openConnection();
  241.  
  242. recAddMobileNotification(db,[],all,0,0,callback);
  243. }
  244.  
  245. function recAddMobileNotification(db,ret,all,i,j,callback){
  246. if(all.length==i) {
  247. destroy(db);
  248. callback(ret);
  249. }
  250. else
  251. {
  252. if(all[i].parcels.length==j) recAddMobileNotification(db,ret,all,i+1,0,callback);
  253. else
  254. {
  255. sql = "SELECT ID FROM MobileNotifications WHERE userID =? AND Message = ?";
  256. db.all(sql,[all[i].ID,'Obavestenje: '+all[i].parcels[j].Message+', Plantaza: '+all[i].parcels[j].Title],function(err,rows){
  257. console.log(err,rows);
  258. if(rows.length!=0) recAddMobileNotification(db,ret,all,i,j+1,callback);
  259. else
  260. {
  261. var tmp = ret.find(el=>el.ID==all[i].ID);
  262.  
  263. if(tmp!=null){
  264. tmp.parcels.push(all[i].parcels[j]);
  265. }
  266. else
  267. {
  268. ret.push({
  269. ID:all[i].ID,
  270. email:all[i].email,
  271. parcels:[all[i].parcels[j]]
  272. });
  273. }
  274.  
  275. sql = "INSERT INTO MobileNotifications VALUES (null,?,?,'"+new Date(Date.now())+"','FALSE',1)";
  276.  
  277. db.run(sql,['Obavestenje: '+all[i].parcels[j].Message+', Plantaza: '+all[i].parcels[j].Title,all[i].ID],function(err){
  278. console.log("---",err);
  279. recAddMobileNotification(db,ret,all,i,j+1,callback);
  280. });
  281. }
  282. });
  283. }
  284. }
  285. }
  286.  
  287. exports.getAllParcelsWithViewers = function(callback){
  288. var db = openConnection();
  289.  
  290. sql = "SELECT u.*,p.ID as ParcelID, p.Title as Title FROM User u JOIN (SELECT p.ID, p.Title, p.UserID as User1, per.UserID as User2 FROM Parcel p LEFT JOIN Permissions per ON p.ID = per.ParcelID) p ON u.ID = p.User1 OR u.ID = p.User2";
  291.  
  292. db.all(sql,function(err,data){
  293. var ret = [];
  294. data.forEach(el=>{
  295. var tmp = ret.find(e=>e.ParcelID == el.ParcelID);
  296.  
  297. if(tmp!=null){
  298. tmp.users.push(el);
  299. }
  300. else{
  301. ret.push({
  302. ParcelID: el.ParcelID,
  303. Title: el.Title,
  304. users:[el]
  305. })
  306. }
  307. });
  308.  
  309. callback(ret);
  310. })
  311. };
  312.  
  313. exports.getMail = function (ID, callback) {
  314. var db = openConnection();
  315. sql = "select `E-Mail` as email from User where ID=?";
  316. db.all(sql,[ID], function (err, rows) {
  317. console.log(err);
  318. console.log(rows);
  319. destroy(db);
  320.  
  321. callback(rows[0].email);
  322. });
  323. }
  324.  
  325. exports.getEmail = function (user, temp, callback) {
  326. var db = openConnection();
  327. sql = "select ID,`E-Mail` as email from User where Username=?";
  328.  
  329. db.all(sql,[user.toLowerCase()], function (err, rows) {
  330.  
  331. if (err) {
  332. destroy(db);
  333. callback(false)
  334. }
  335. else {
  336. if (rows.length > 0) {
  337. var pass = getSHA1(temp);
  338. sql = "Update User set Password=? where ID=?";
  339. db.run(sql,[pass,rows[0].ID], function () {
  340. destroy(db);
  341. callback(rows[0].email);
  342. });
  343.  
  344.  
  345. }
  346.  
  347. else {
  348. destroy(db);
  349. callback(false);
  350. }
  351. }
  352. });
  353. }
  354. exports.getEmailFromSupportTicket = function (ID, callback) {
  355. var db = openConnection();
  356. sql = 'select u.`E-Mail` as email from SupportTicket s join User u on u.ID=s.UserID where s.ID=?';
  357.  
  358. db.all(sql,[ID], function (err, rows) {
  359. destroy(db);
  360. callback(rows[0].email);
  361. });
  362. }
  363.  
  364. exports.addSupportTicket = function (userID, Text, date) {
  365. var db = openConnection();
  366. sql = "INSERT INTO SupportTicket(ID,UserID,Text,Date) VALUES (null,?,?,?)";
  367.  
  368. db.run(sql,[userID,Text,date], function () {
  369. destroy(db);
  370. });
  371. }
  372. exports.deleteOldNotif = function (ID, callback) {
  373. days = "(";
  374. var br = 0;
  375. var db = openConnection();
  376. var now = new Date();
  377. //console.log(now);
  378. sql = "select * from Notification where UserID=?";
  379. db.all(sql,[ID], function (err, rows) {
  380. if (rows.length > 0) {
  381. rows.forEach(el => {
  382. var datum = new Date(el.Date);
  383.  
  384. if (((new DateDiff(now, datum)).days()) > 3) {
  385.  
  386. if (br == 0) {
  387. br++;
  388. days += "" + el.ID;
  389. }
  390. else {
  391. days += "," + el.ID;
  392. }
  393. }
  394.  
  395. });
  396. days += ")";
  397. //console.log(days);
  398. sql = "Delete from Notification where ID in ?";
  399. db.run(sql,[days], function () {
  400. callback(true);
  401. });
  402. }
  403. else {
  404. callback(true);
  405.  
  406. }
  407. });
  408.  
  409. }
  410.  
  411. exports.updateDate = function (un, type, callback) {
  412. sql = "UPDATE User SET PaymentType = ? AND ActivationDate = '" + new Date(Date.now()) + "' WHERE Username = ?";
  413.  
  414. var db = openConnection();
  415.  
  416. db.run(sql,[type,un.toLowerCase()], function () {
  417. callback();
  418. });
  419. }
  420.  
  421. exports.getToDo = function (ID, callback) {
  422. sql = "Select * from Notification where ParcelID=?";
  423.  
  424. var db = openConnection();
  425.  
  426. db.all(sql,[ID], function (err, rows) {
  427. callback(rows);
  428. });
  429. }
  430.  
  431. exports.doIt = function (ID, check, user) {
  432. sql = "Select * from Notification where ID=?";
  433.  
  434. var db = openConnection();
  435.  
  436. db.all(sql,[ID], function (err, rows) {
  437. if (rows.length > 0) {
  438. sql = "Update Notification set ToDo=? where ID=?";
  439. db.run(sql,[check,ID]);
  440. if (check == 0) {
  441. sql = "Delete from ToDo where UserID=? and Title=? and Date=? and ParcelID=?";
  442. db.run(sql,[user,rows[0].Title,rows[0].Date,rows[0].ParcelID]);
  443. }
  444. else {
  445. sql = "INSERT into ToDo(Title,UserID,ParcelID,Date) VALUES(?,?,?,?)"
  446. db.run(sql,[rows[0].Title,user,rows[0].ParcelID,rows[0].Date]);
  447. }
  448. }
  449. });
  450. }
  451. exports.getNumberSupportTicket = function (callback) {
  452. var db = openConnection();
  453. sql = "Select count(ID) as number from SupportTicket";
  454.  
  455. db.all(sql, function (err, data) {
  456. destroy(db);
  457. callback(data[0].number);
  458. });
  459. }
  460.  
  461. exports.getNumberPendingOwner = function (callback) {
  462. var db = openConnection();
  463. sql = "Select count(*) as numb From PendingOwner WHERE URL IS NOT NULL";
  464.  
  465. db.all(sql, function (err, data) {
  466. destroy(db);
  467. callback(data[0].numb);
  468. });
  469. }
  470.  
  471.  
  472. exports.getCrops = function (callback) {
  473. var db = openConnection();
  474. sql = 'select * from Crops';
  475.  
  476. db.all(sql, function (err, rows) {
  477. destroy(db);
  478. callback(rows);
  479. });
  480. }
  481. exports.getUserSubCrops = function (crop, username, callback) {
  482. var db = openConnection();
  483. sql = "SELECT ID from User where Username=?";
  484. db.all(sql,[username.toLowerCase()], function (err1, rows1) {
  485. rows1.forEach(function (row1) {
  486. sql = 'select ID,Title from CustomSubCrop where CropID=? and OwnerID=?';
  487. db.all(sql,[crop,row1.ID], function (err, rows) {
  488. destroy(db);
  489. callback(rows, row1.ID);
  490. });
  491. });
  492. });
  493. }
  494. exports.getOwnerSubCrops = function (crop, ID, callback) {
  495.  
  496. var db = openConnection();
  497. sql = "SELECT c.ID, c.Title from OwnerWithUser as p join CustomSubCrop as c on c.OwnerID=p.OwnerID where p.UserID=? and c.CropID=?";
  498. db.all(sql,[ID,crop], function (err, rows) {
  499. destroy(db);
  500. callback(rows);
  501. });
  502. }
  503. exports.getFreeUsersSubCrops = function (crop, ID, callback) {
  504.  
  505. var db = openConnection();
  506. sql = "SELECT c.ID, c.Title from OwnerWithUser as p join CustomSubCrop as c on c.OwnerID=p.UserID where p.OwnerID=? and c.CropID=?";
  507. db.all(sql,[ID,crop], function (err, rows) {
  508. destroy(db);
  509. callback(rows);
  510. });
  511. }
  512. exports.getSubCrops = function (crop, callback) {
  513. var db = openConnection();
  514.  
  515. sql = 'select ID,Title from SubCrop where CropsID=?';
  516. db.all(sql,[crop], function (err, rows) {
  517. destroy(db);
  518.  
  519. callback(rows);
  520. });
  521. }
  522. exports.insertSubCrop = function (ID, crop, username, callback) {
  523. var db = openConnection();
  524. sql = "SELECT ID from User where Username=?";
  525. db.all(sql,[username.toLowerCase()], function (err1, rows1) {
  526. rows1.forEach(function (row1) {
  527. sql = "select ID from CustomSubCrop where Title=? and OwnerID=?";
  528. db.all(sql,[crop,row1.ID], function (err, rows) {
  529. if (rows.length > 0) {
  530. destroy(db);
  531. callback(false);
  532. }
  533. else {
  534.  
  535. sql = "select ID from SubCrop where Title=?";
  536. db.all(sql,[crop], function (err, rows2) {
  537. if (rows2.length > 0) {
  538. destroy(db);
  539. callback(false);
  540. }
  541. else {
  542. sql = "INSERT INTO CustomSubCrop(OwnerID,Title,CropID) VALUES (?,?,?)";
  543. db.run(sql,[row1.ID,crop,ID], function () {
  544.  
  545. destroy(db);
  546. callback(true);
  547. });
  548. }
  549. });
  550. }
  551. });
  552. });
  553. });
  554. }
  555. exports.getManufactures = function (callback) {
  556. var db = openConnection();
  557. sql = "select * from Manufacturer"
  558. db.all(sql, function (err, rows) {
  559. destroy(db);
  560. callback(rows);
  561. });
  562. }
  563.  
  564. exports.updateSubCrop = function (ID, crop, callback) {
  565. var db = openConnection();
  566. sql = "select ID from CustomSubCrop where Title=?";
  567. db.all(sql,[crop], function (err, rows) {
  568. if (rows.length > 0) {
  569. destroy(db);
  570. callback(false);
  571. }
  572. else {
  573.  
  574. sql = "select ID from SubCrop where Title=?";
  575. db.all(sql,[crop], function (err, rows2) {
  576. if (rows2.length > 0) {
  577. destroy(db);
  578. callback(false);
  579. }
  580. else {
  581. sql = "Update CustomSubCrop Set Title=? WHERE ID=?";
  582. db.run(sql,[crop,ID], function () {
  583. destroy(db);
  584. callback(true);
  585. });
  586.  
  587. }
  588. });
  589. }
  590. });
  591.  
  592. }
  593.  
  594. exports.deleteSubCrop = function (IDsub, callback) {
  595. var db = openConnection();
  596. sql = "select * from SubCropOnParcel as p join CustomSubCrop as c on p.CustomCropID=c.ID where c.ID=?";
  597. db.all(sql,[IDsub], function (err, rows2) {
  598. if (rows2.length > 0) {
  599. destroy(db);
  600. callback(false);
  601. }
  602. else {
  603. sql = "DELETE FROM CustomSubCrop WHERE ID=?";
  604. db.run(sql,[IDsub], function () {
  605.  
  606. destroy(db);
  607. callback(true);
  608. });
  609. }
  610. });
  611. }
  612. exports.insertCrops = function (crop, callback) {
  613. var db = openConnection();
  614. sql = "select ID from Crops where Title=?";
  615. db.all(sql,[crop], function (err, rows2) {
  616. if (rows2.length > 0) {
  617. destroy(db);
  618. callback(false);
  619. }
  620. else {
  621. sql = "INSERT INTO Crops(Title) VALUES (?)";
  622. db.run(sql,[crop], function () {
  623.  
  624. destroy(db);
  625. callback(true);
  626. });
  627. }
  628. });
  629. }
  630. exports.insertGeneralSubCrop = function (IDcrop, title, manuf, callback) {
  631. var db = openConnection();
  632. sql = "select ID from SubCrop where Title=? and CropsID=?";
  633. db.all(sql,[title,IDcrop], function (err, rows2) {
  634. if (rows2.length > 0) {
  635. destroy(db);
  636. callback(false);
  637. }
  638. else {
  639. sql = "INSERT INTO SubCrop(CropsID,Title) VALUES (?,?)";
  640. db.run(sql,[IDcrop,title], function () {
  641. sql = "select* from SubCrop where Title=? and CropsID=?";
  642. db.all(sql,[title,IDcrop], function (err, rows2) {
  643. sql = "select * from Manufacturer where Title=?";
  644. db.all(sql,[manuf], function (err, rows) {
  645. if (rows.length > 0) {
  646. sql = "INSERT INTO SubCropOfManufacturer(SubCropID,ManufacturerID) VALUES(?,?)"
  647. db.run(sql,[rows2[0].ID,rows[0].ID], function () {
  648. destroy(db);
  649. callback(true);
  650. });
  651. }
  652. else {
  653. sql = "INSERT INTO Manufacturer(Title) VALUES(?)";
  654. db.run(sql,[manuf], function () {
  655. sql = "select * from Manufacturer where Title=?";
  656. db.all(sql,[manuf], function (err, rows) {
  657. sql = "INSERT INTO SubCropOfManufacturer(SubCropID,ManufacturerID) VALUES(?,?)"
  658. db.run(sql,[rows2[0].ID,rows[0].ID], function () {
  659. destroy(db);
  660. callback(true);
  661. });
  662. });
  663. });
  664. }
  665. });
  666. });
  667. });
  668. }
  669. });
  670. }
  671. exports.deleteCrops = function (ID, callback) {
  672. var db = openConnection();
  673. sql = "select s.ID from SubCropOnParcel as p join SubCropOfManufacturer as m on p.ManufacturersCropID=m.ID join SubCrop as s on m.SubCropID=s.ID where s.CropsID=?";
  674. db.all(sql,[ID], function (err2, rows2) {
  675. if (rows2.length > 0) {
  676. //console.log(rows2);
  677. destroy(db);
  678. callback(false);
  679. }
  680. else {
  681. sql = "select c.ID from SubCropOnParcel as p join CustomSubCrop as c on p.CustomCropID=c.ID where c.CropID=?";
  682. db.all(sql,[ID], function (err, rows) {
  683. if (rows.length > 0) {
  684. destroy(db);
  685.  
  686.  
  687. callback(false);
  688. }
  689. else {
  690. sql = "DELETE FROM SubCrop WHERE CropsID=?";
  691. db.run(sql,[ID], function () {
  692. sql = "DELETE FROM CustomSubCrop WHERE CropID=?";
  693. db.run(sql,[ID], function () {
  694.  
  695. sql = "DELETE FROM Crops WHERE ID=?";
  696. db.run(sql,[ID], function () {
  697.  
  698. destroy(db);
  699. callback(true);
  700. });
  701. });
  702.  
  703. });
  704.  
  705. }
  706. });
  707. }
  708. });
  709. }
  710. exports.deleteGeneralSubCrop = function (IDsub, callback) {
  711. var db = openConnection();
  712. sql = "select * from SubCropOnParcel as p join SubCropOfManufacturer as m on p.ManufacturersCropID=m.ID join SubCrop as s on m.SubCropID=s.ID where s.ID=?";
  713. db.all(sql,[IDsub], function (err, rows2) {
  714. if (rows2.length > 0) {
  715. destroy(db);
  716. callback(false);
  717. }
  718. else {
  719. sql = "DELETE FROM SubCrop WHERE ID=?";
  720. db.run(sql,[IDsub], function () {
  721. sql = "DELETE from SubCropOfManufacturer where SubCropID=" + IDsub;
  722. db.run(sql,[IDsub], function () {
  723. destroy(db);
  724. callback(true);
  725. });
  726. });
  727. }
  728. });
  729. }
  730. exports.updateCrops = function (crop, ID, callback) {
  731. var db = openConnection();
  732. sql = "select ID from Crops where Title=?";
  733. db.all(sql,[crop], function (err, rows2) {
  734. if (rows2.length > 0) {
  735. destroy(db);
  736. callback(false);
  737. }
  738. else {
  739. sql = "Update Crops Set Title=? WHERE ID=?";
  740. db.run(sql,[crop,ID], function () {
  741.  
  742. destroy(db);
  743. callback(true);
  744. });
  745. }
  746. });
  747. }
  748. exports.updateGeneralSubCrop = function (IDcrop, IDsub, title, callback) {
  749. var db = openConnection();
  750. sql = "select ID from SubCrop where Title=? and CropsID=?";
  751. db.all(sql,[title,IDcrop], function (err, rows2) {
  752. if (rows2.length > 0) {
  753. destroy(db);
  754. callback(false);
  755. }
  756. else {
  757. sql = "Update SubCrop Set Title=? WHERE ID=?";
  758. db.run(sql,[title,IDsub], function () {
  759.  
  760. destroy(db);
  761. callback(true);
  762. });
  763. }
  764. });
  765. }
  766. exports.getUsersForEdit = function (callback) {
  767. var db = openConnection();
  768. sql = 'SELECT *, `E-Mail` as email FROM User ORDER BY Fname || \' \' || Lname DESC';
  769.  
  770. db.all(sql, function (err, rows) {
  771. destroy(db);
  772.  
  773. if (err) {
  774. callback(false);
  775. }
  776. else {
  777. callback(JSON.stringify(rows));
  778. }
  779. });
  780. }
  781.  
  782. exports.saveUserDataEdit = function (json, callback) {
  783. var db = openConnection();
  784.  
  785. var user = JSON.parse(json);
  786.  
  787.  
  788. sql = "SELECT ID from User where Username=? and ID!=? UNION Select ID from PendingOwner where Username=?";
  789. db.all(sql,[user.Username.toLowerCase(),user.ID,user.Username.toLowerCase()], function (err, rows) {
  790. if (!err) {
  791. if (rows.length > 0) {
  792. destroy(db);
  793. callback(false);
  794. }
  795. else {
  796. var arr = [];
  797.  
  798. sql = 'UPDATE User SET Fname=?, Lname=?, Username=?, `E-Mail`=?';
  799. arr.push(user.Fname);
  800. arr.push(user.Lname);
  801. arr.push(user.Username.toLowerCase());
  802. arr.push(user.email);
  803. if (user.Phone != '') { sql += ', phone=?'; arr.push(user.Phone); }
  804. if (user.Password != "********") { sql += " ,Password=?"; arr.push(getSHA1(user.Password)); }
  805. sql += ' WHERE ID=?';
  806. arr.push(user.ID);
  807.  
  808.  
  809. db.run(sql,arr, function () {
  810. destroy(db);
  811. callback(true);
  812. });
  813. }
  814. }
  815. });
  816. }
  817.  
  818. exports.insertAgronomist = function (user, userType, callback) {
  819. var db = openConnection();
  820.  
  821. if(user.phone==undefined) user.phone = '';
  822.  
  823. sql = "SELECT ID from User where Username=?";
  824. db.all(sql,[user.Username.toLowerCase()], function (err, rows) {
  825. if (!err) {
  826. if (rows.length > 0) {
  827. destroy(db);
  828. callback(false);
  829. }
  830. else {
  831. sql = "SELECT ID from PendingOwner where Username=?";
  832. db.all(sql,[user.Username.toLowerCase()], function (err1, rows1) {
  833. if (!err1) {
  834. if (rows1.length > 0) {
  835. destroy(db);
  836. callback(false);
  837. }
  838. else {
  839. console.log(user);
  840. console.log(userType);
  841. sql = "INSERT INTO User(Fname,Lname,Username,Password,`E-Mail`,Phone, AccountTypeID,ActivationDate, PaymentType) VALUES (?,?,?,?,?,?,?,'" + new Date() + "',-1)";
  842. db.run(sql,[user.fname,user.lname,user.username.toLowerCase(),getSHA1(user.password),user.email,user.phone,userType], function (err) {
  843. console.log(sql);
  844. console.log(err);
  845. destroy(db);
  846. callback(true);
  847. });
  848. }
  849. }
  850. });
  851. }
  852. }
  853. });
  854. }
  855.  
  856. exports.getPermissions = function (ID, callback) {
  857. var perms = {
  858. view: false,
  859. edit: false,
  860. rules: false
  861. }
  862.  
  863. var db = openConnection();
  864.  
  865. sql = "SELECT * FROM Permissions WHERE UserID=?";
  866.  
  867. db.all(sql,[ID], function (err, rows) {
  868. destroy(db);
  869.  
  870. if (err) callback(perms)
  871. else {
  872. rows.forEach(row => {
  873. perms.view = perms.view || row.View;
  874. perms.edit = perms.edit || row.Edit;
  875. perms.rules = perms.rules || row.Rules;
  876. });
  877.  
  878. callback(perms);
  879. }
  880. });
  881. }
  882.  
  883. exports.getPermissionsOfOwner = function (ID, callback) {
  884. console.log(ID);
  885. var db = openConnection();
  886. sql = " SELECT User.Fname, User.Lname, User.Username,Permissions.*, Parcel.Title,User.`E-Mail`as email, User.ID as accID FROM Permissions JOIN User ON Permissions.UserID=User.ID JOIN Parcel ON Permissions.ParcelID = Parcel.ID WHERE Parcel.UserID = ?" +
  887. " UNION " +
  888. "SELECT User.Fname, User.Lname, User.Username,null as ID, 0 as Rules, 0 as View, 0 as Edit, User.ID as UserID, Parcel.ID as ParcelID, Parcel.Title ,User.`E-Mail`as email, User.ID as accID FROM User JOIN OwnerWithUser ON User.ID = OwnerWithUser.UserID JOIN Parcel on OwnerID = Parcel.UserID WHERE OwnerID =?";
  889. db.all(sql,[ID,ID], function (err, rows) {
  890. destroy(db);
  891.  
  892. if (err) callback(false);
  893. else {
  894. callback(rows);
  895. }
  896. });
  897. }
  898.  
  899. exports.savePermissions = function (rows) {
  900. var db = openConnection();
  901.  
  902. rows.forEach(perms => {
  903. perms.Edit = perms.Edit ? 1 : 0;
  904. perms.View = perms.View ? 1 : 0;
  905. perms.Rules = perms.Rules ? 1 : 0;
  906. });
  907. if (rows.length != 0) {
  908. sql = "DELETE FROM Permissions WHERE (UserID = " + rows[0].accID + " AND ParcelID = " + rows[0].ParcelID + ")";
  909.  
  910. for (var i = 1; i < rows.length; i++)
  911. sql += " OR (UserID = " + rows[i].accID + " AND ParcelID = " + rows[i].ParcelID + ")"
  912.  
  913. db.run(sql, function () {
  914. sql = "INSERT INTO Permissions VALUES(null," + rows[0].Rules + "," + rows[0].View + "," + rows[0].Edit + "," + rows[0].accID + "," + rows[0].ParcelID + ")";
  915.  
  916. for (var i = 1; i < rows.length; i++)
  917. sql += ",(null," + rows[i].Rules + "," + rows[i].View + "," + rows[i].Edit + "," + rows[i].accID + "," + rows[i].ParcelID + ")";
  918.  
  919. db.run(sql, function () {
  920. destroy(db);
  921. })
  922.  
  923. });
  924. }
  925. }
  926.  
  927. exports.getOwnerID = function (parcelID, callback) {
  928. db = openConnection();
  929. sql = "SELECT UserID FROM Parcel WHERE ID = ?";
  930.  
  931. db.all(sql,[parcelID], function (err, data) {
  932. callback(data[0].UserID);
  933. });
  934. }
  935.  
  936. exports.getEditPermissions = function (ID, callback) {
  937. db = openConnection();
  938. sql = "SELECT Edit FROM Permissions WHERE UserID = ?";
  939.  
  940. db.all(sql,[ID], function (err, data) {
  941. console.log(data);
  942. var count = 0;
  943. data.forEach(el => {
  944. count += el.Edit;
  945. });
  946. destroy(db);
  947. callback(count != 0);
  948. });
  949. }
  950.  
  951. exports.getAllWorks = function (ID, callback) {
  952. db = openConnection();
  953.  
  954. sql = "SELECT u.ID as OwnerID, u.Fname || ' ' || u.Lname as Name FROM User u JOIN OwnerWithUser o ON u.ID = o.OwnerID WHERE o.UserID = ?";
  955.  
  956. db.all(sql,[ID], function (err, data) {
  957. console.log(err);
  958. destroy(db);
  959. callback(data);
  960. });
  961. }
  962.  
  963. exports.deleteJob = function (ID, ownerID) {
  964. db = openConnection();
  965.  
  966. console.log(ID,ownerID);
  967.  
  968. sql = "DELETE FROM Permissions WHERE UserID = ? AND ParcelID IN (SELECT ID FROM Parcel WHERE UserID = ?)";
  969.  
  970. db.run(sql,[ID,ownerID], function (err) {
  971. console.log(err);
  972. sql = "DELETE FROM OwnerWithUser WHERE UserID =? AND OwnerID=?";
  973.  
  974. db.run(sql,[ID,ownerID],function(err){
  975. console.log(err);
  976. destroy(db);
  977. });
  978. });
  979. }
  980.  
  981. exports.getParcels = function (ID, callback) {
  982. var db = openConnection();
  983. sql = "SELECT p.UserID, p.ID, p.Title, null as Owner, p.Title as parcelWithOwner, No, MiddleLongitude, MiddleLatitude, 1 as View, 1 as Edit, 1 as Rules FROM User u JOIN Parcel p ON u.ID = p.UserID WHERE p.UserID = ?" +
  984. " UNION " +
  985. "SELECT p2.UserID, p2.ID, p2.Title, u2.Fname || ' ' || u2.Lname as Owner, p2.Title as parcelWithOwner, No, MiddleLongitude, MiddleLatitude, View, Edit, Rules FROM User u JOIN Permissions p ON u.ID = p.UserID JOIN Parcel p2 ON p.ParcelID = p2.ID JOIN User u2 ON p2.UserID = u2.ID WHERE u.ID = ?" + " AND View = 1";
  986. //console.log(sql);
  987. db.all(sql,[ID,ID], function (err, data) {
  988. destroy(db);
  989. if (err) callback([]);
  990. else callback(data);
  991. });
  992. }
  993.  
  994. exports.getOwners = function (ID, callback) {
  995. var db = openConnection();
  996. sql = "SELECT OwnerID as UserID FROM OwnerWithUser WHERE UserID = ?";
  997. db.all(sql,[ID], function (err, data) {
  998. destroy(db);
  999. //console.log(data);
  1000. if (err) callback([]);
  1001. else callback(data);
  1002. });
  1003. }
  1004.  
  1005. exports.deleteParcel = function (ID, callback) {
  1006. var db = openConnection();
  1007. sql = "DELETE FROM Coordinates WHERE ParcelID = ?";
  1008.  
  1009. db.run(sql,[ID], function () {
  1010. sql = "DELETE FROM SubCropOnParcel WHERE ParcelID = ?";
  1011.  
  1012. db.run(sql,[ID], function () {
  1013. sql = "DELETE FROM Permissions WHERE ParcelID = ?";
  1014.  
  1015. db.run(sql,[ID], function () {
  1016. sql = "DELETE FROM Parcel WHERE ID = ?";
  1017.  
  1018. db.run(sql,[ID], function () {
  1019. callback();
  1020. });
  1021. });
  1022. });
  1023. });
  1024. }
  1025.  
  1026. exports.getCropsForParcel = function (ID, callback) {
  1027. var db = openConnection();
  1028. sql = "SELECT 'm' || p.ManufacturersCropID as ID, sc.Title || ' - ' || m.Title as Name " +
  1029. "FROM SubCropOnParcel p JOIN SubCrop s ON p.ManufacturersCropID = s.CropsID JOIN SubCropOfManufacturer sm ON s.CropsID = sm.ID JOIN SubCrop sc ON sm.SubCropID = sc.ID JOIN Manufacturer m ON sm.ManufacturerID = m.ID " +
  1030. "WHERE p.ParcelID = " + ID +
  1031. " UNION " +
  1032. "SELECT 'c' || p.customCropID as ID, c.Title as Name " +
  1033. "FROM SubCropOnParcel p JOIN CustomSubCrop c ON p.CustomCropID = c.ID " +
  1034. "WHERE p.ParcelID = ?";
  1035. db.all(sql,[ID], function (err, data) {
  1036. destroy(db);
  1037. if (err || data.length == 0) callback(null);
  1038. else callback(JSON.stringify(data));
  1039. });
  1040. }
  1041.  
  1042. exports.getCoords = function (ID, callback) {
  1043. var db = openConnection();
  1044.  
  1045. sql = "SELECT * FROM Coordinates WHERE ParcelID = ? ORDER BY Coordinates.`Order` ASC"
  1046. db.all(sql,[ID], function (err, data) {
  1047. destroy(db);
  1048. callback(data);
  1049. });
  1050. }
  1051.  
  1052. exports.getAllCoords = function (ID, callback) {
  1053. var db = openConnection();
  1054.  
  1055. sql = "SELECT * FROM (SELECT p.ID, Longitude, Latitude, `Order` FROM User u JOIN Parcel p ON u.ID = p.UserID JOIN Coordinates c ON p.ID = c.ParcelID WHERE p.UserID = ? UNION SELECT p2.ID, Longitude, Latitude, `Order` FROM User u JOIN Permissions p ON u.ID = p.UserID JOIN Parcel p2 ON p.ParcelID = p2.ID JOIN Coordinates c ON p.ID = c.ParcelID WHERE u.ID = ? AND View = 1) ORDER BY `Order` ASC";
  1056.  
  1057.  
  1058. db.all(sql,[ID,ID], function (err, data) {
  1059. destroy(db);
  1060.  
  1061. var ret = [];
  1062. data.forEach(row => {
  1063. var temp = ret.find(el => el.ID == row.ID);
  1064. if (temp != null) {
  1065. temp.coords.push({
  1066. lng: row.Longitude,
  1067. lat: row.Latitude,
  1068. order: row.Order
  1069. });
  1070. }
  1071. else {
  1072. ret.push({
  1073. ID: row.ID,
  1074. coords: [{
  1075. lng: row.Longitude,
  1076. lat: row.Latitude,
  1077. order: row.Order
  1078. }]
  1079. });
  1080. }
  1081. })
  1082. callback(ret);
  1083. });
  1084. }
  1085.  
  1086. exports.saveParcelEdit = function (data, callback) {
  1087. var db = openConnection();
  1088. ////console.log(data);
  1089.  
  1090. var west = +data.Coords[0].lng;
  1091. var east = +data.Coords[0].lng;
  1092. var north = +data.Coords[0].lat;
  1093. var south = +data.Coords[0].lat;
  1094.  
  1095. data.Coords.forEach(dev => {
  1096. if (west > +dev.lng) {
  1097. west = +dev.lng;
  1098. }
  1099. if (east < +dev.lng) {
  1100. east = +dev.lng;
  1101. }
  1102. if (north < +dev.lat) {
  1103. north = +dev.lat;
  1104. }
  1105. if (south > +dev.lat) {
  1106. south = +dev.lat;
  1107. }
  1108. });
  1109.  
  1110. var midLat = (north + south) / 2;
  1111. var midLng = (west + east) / 2;
  1112.  
  1113. sql = "UPDATE Parcel SET Title = ?, MiddleLatitude = ?, MiddleLongitude = ? WHERE ID = ?";
  1114.  
  1115. db.run(sql,[data.Title,midLat,midLng,data.ID], function () {
  1116. sql = "DELETE FROM Coordinates WHERE ParcelID =?";
  1117. //
  1118. db.run(sql,[data.ID], function () {
  1119. sql = "INSERT INTO Coordinates(Latitude, Longitude, `Order`, ParcelID) VALUES ";
  1120. var count = 0;
  1121. var arr=[];
  1122. //
  1123. data.Coords.forEach(coord => {
  1124. count++;
  1125. if (count != 1) sql += ",";
  1126. arr.push(coord.lat);
  1127. arr.push(coord.lng);
  1128. arr.push(count);
  1129. arr.push(data.ID);
  1130. sql += "(?,?,?,?)";
  1131. });
  1132. ////console.log(sql);
  1133. db.run(sql,arr, function () {
  1134. //
  1135. sql = "DELETE FROM SubCropOnParcel WHERE ParcelID =?";
  1136.  
  1137. db.run(sql,[data.ID], function () {
  1138. sql = "INSERT INTO SubCropOnParcel(ManufacturersCropID,CustomCropID,ParcelID) VALUES";
  1139. var arr2=[];
  1140. count = 0;
  1141. //
  1142. data.Crops.forEach(crop => {
  1143. count++;
  1144. if (count != 1) sql += ",";
  1145.  
  1146. if (crop.ID[0] == "c") {
  1147. sql += "(null,?,?)";
  1148. arr2.push(crop.ID.substring(1));
  1149. arr2.push(data.ID);
  1150. }
  1151. else {
  1152. sql += "(?,null,?)";
  1153. arr2.push(crop.ID.substring(1));
  1154. arr2.push(data.ID);
  1155. }
  1156. });
  1157. ////console.log(sql);
  1158. if (data.Crops.length == 0) sql = "UPDATE Parcel SET ID = 0 WHERE ID = 0";
  1159.  
  1160. db.run(sql,arr2, function () {
  1161. //
  1162. destroy(db);
  1163. callback();
  1164. });
  1165. })
  1166. });
  1167. });
  1168. });
  1169. }
  1170.  
  1171.  
  1172. exports.saveNewParcel = function (data, ID, callback) {
  1173. var db = openConnection();
  1174. ////console.log(data);
  1175. var arr = [];
  1176. if(data.Owner==-1) {
  1177. sql="select * from Parcel where UserID=? and Title=?";
  1178. arr.push(ID);
  1179. arr.push(data.Title);
  1180. }
  1181. else {
  1182. sql="select * from Parcel where UserID=? and Title=?";
  1183. arr.push(data.Owner);
  1184. arr.push(data.Title);
  1185. }
  1186. db.all(sql,arr,function(err,rows){
  1187. console.log(sql);
  1188. console.log(rows);
  1189. console.log(err);
  1190. if(rows.length!=0)
  1191. {
  1192. destroy(db)
  1193. callback(false);
  1194.  
  1195. }
  1196. else{
  1197.  
  1198. var west = +data.Coords[0].lng;
  1199. var east = +data.Coords[0].lng;
  1200. var north = +data.Coords[0].lat;
  1201. var south = +data.Coords[0].lat;
  1202.  
  1203. data.Coords.forEach(dev => {
  1204. if (west > +dev.lng) {
  1205. west = +dev.lng;
  1206. }
  1207. if (east < +dev.lng) {
  1208. east = +dev.lng;
  1209. }
  1210. if (north < +dev.lat) {
  1211. north = +dev.lat;
  1212. }
  1213. if (south > +dev.lat) {
  1214. south = +dev.lat;
  1215. }
  1216. });
  1217.  
  1218. var midLat = (north + south) / 2;
  1219. var midLng = (west + east) / 2;
  1220. var arr2 = [];
  1221.  
  1222. if (data.Owner == -1) {
  1223. sql = "INSERT INTO Parcel VALUES(null,?,?,?,?,?)";
  1224. arr2.push(data.Title);
  1225. arr2.push(midLng);
  1226. arr2.push(midLat);
  1227. arr2.push(ID);
  1228. arr2.push(data.No);
  1229. }
  1230. else {
  1231. sql = "INSERT INTO Parcel VALUES(null,'" + data.Title + "'," + midLng + "," + midLat + "," + data.Owner + ",'" + data.No + "')";
  1232. arr2.push(data.Title);
  1233. arr2.push(midLng);
  1234. arr2.push(midLat);
  1235. arr2.push(data.Owner);
  1236. arr2.push(data.No);
  1237. }
  1238.  
  1239. db.run(sql,arr2, function () {
  1240. var arr3 = [];
  1241.  
  1242. if (data.Owner == -1) {
  1243. sql = "SELECT * FROM Parcel WHERE UserID = " + ID + " AND Title LIKE '" + data.Title + "' AND MiddleLatitude = " + midLat + " AND MiddleLongitude = " + midLng;
  1244. arr3.push(ID);
  1245. arr3.push(data.Title);
  1246. arr3.push(midLat);
  1247. arr3.push(midLng);
  1248. }
  1249. else {
  1250. sql = "SELECT * FROM Parcel WHERE UserID = " + data.Owner + " AND Title LIKE '" + data.Title + "' AND MiddleLatitude = " + midLat + " AND MiddleLongitude = " + midLng;
  1251. arr3.push(data.Owner);
  1252. arr3.push(data.Title);
  1253. arr3.push(midLat);
  1254. arr3.push(midLng);
  1255.  
  1256. }
  1257. //
  1258. db.all(sql,arr3, function (err, parcels) {
  1259. //console.log(err);
  1260. //console.log(parcels);
  1261. //console.log(sql);
  1262. sql = "INSERT INTO Coordinates(Latitude, Longitude, `Order`, ParcelID) VALUES ";
  1263. var count = 0;
  1264. var arr4 =[];
  1265. //
  1266. data.Coords.forEach(coord => {
  1267. count++;
  1268. if (count != 1) sql += ",";
  1269. sql += "(?,?,?,?)";
  1270. arr4.push(coord.lat);
  1271. arr4.push(coord.lng);
  1272. arr4.push(count);
  1273. arr4.push(parcels[0].ID);
  1274.  
  1275. });
  1276. ////console.log(sql);
  1277. db.run(sql,arr4, function () {
  1278. //
  1279. sql = "INSERT INTO SubCropOnParcel(ManufacturersCropID,CustomCropID,ParcelID) VALUES";
  1280. count = 0;
  1281. var arr5 =[];
  1282. //
  1283. data.Crops.forEach(crop => {
  1284. count++;
  1285. if (count != 1) sql += ",";
  1286.  
  1287. if (crop.ID[0] == "c") {
  1288. sql += "(null,?,?)";
  1289. arr5.push(crop.ID.substring(1));
  1290. arr5.push(parcels[0].ID);
  1291. }
  1292. else {
  1293. sql += "(?,null,?)";
  1294. arr5.push(crop.ID.substring(1));
  1295. arr5.push(parcels[0].ID);
  1296. }
  1297. });
  1298. ////console.log(sql);
  1299. if (data.Crops.length == 0) sql = "UPDATE Parcel SET ID = 0 WHERE ID = 0";
  1300.  
  1301. db.run(sql,arr5, function () {
  1302. //
  1303. if (data.Owner == -1) {
  1304. destroy(db);
  1305. callback(parcels[0]);
  1306. }
  1307. else {
  1308. sql = "INSERT INTO Permissions VALUES(null,0,1,0,?,?)";
  1309.  
  1310. db.run(sql,[ID,parcels[0].ID], function () {
  1311. destroy(db);
  1312. callback(parcels[0]);
  1313. });
  1314. }
  1315. });
  1316. });
  1317. });
  1318. });
  1319. }
  1320. });
  1321. }
  1322.  
  1323.  
  1324. exports.deletePermissions = function (ID, myID) {
  1325. var db = openConnection();
  1326. sql = "DELETE FROM OwnerWithUser WHERE UserID =? AND OwnerID=?";
  1327.  
  1328. db.run(sql,[ID,myID], function (err) {
  1329. sql = "DELETE FROM Permissions WHERE UserID = ? AND ParcelID IN " +
  1330. "( SELECT Parcel.ID FROM Parcel JOIN User ON Parcel.UserID = User.ID WHERE User.ID = ? )";
  1331.  
  1332. db.run(sql,[ID,myID], function (err) {
  1333. exports.getUser(myID,function(user){
  1334. exports.insertInNotification(ID,null,"Niste vise angazovani od strane "+user.Fname+" "+user.Lname+".",3,function(flg){
  1335. exports.insertInMobileNotification(ID,"Niste vise angazovani od strane "+user.Fname+" "+user.Lname+".",new Date());
  1336.  
  1337. destroy(db);
  1338. });
  1339. });
  1340. });
  1341. });
  1342. }
  1343.  
  1344. exports.addWorker = function (perms, ID, parcels, callback) {
  1345. var db = openConnection();
  1346.  
  1347. sql = "SELECT * , `E-mail` as email from User WHERE (username=? OR `E-mail`=?) AND AccountTypeID != 1 AND AccountTypeID != 2 ";
  1348.  
  1349.  
  1350. db.all(sql,[perms.workerText.toLowerCase(),perms.workerText], function (err, rows) {
  1351. if (rows.length == 0)
  1352. callback(false, false,null,null);
  1353. else {
  1354. rows.forEach(function (row) {
  1355. sql2 = "SELECT * from OwnerWithUser WHERE OwnerID=? AND UserID=?";
  1356. db.all(sql2,[ID,row.ID], function (err1, rows1) {
  1357. if (rows1.length != 0)
  1358. callback(false, true,null,null);
  1359. else {
  1360. //
  1361. exports.getUser(ID,function(user){
  1362.  
  1363.  
  1364. par="";
  1365. parcels.forEach(x=>{if(x.View || x.Rules || x.Edit) par+=x.Title+", "});
  1366.  
  1367. //
  1368. sql1 = "INSERT INTO OwnerWithUser VALUES (" + ID + "," + row.ID + ");"
  1369. db.run(sql1, function (err2, rows2) {
  1370. if (parcels.length == 0) {
  1371. text= "Angazovani ste od strane "+user.Fname+" "+user.Lname+".";
  1372. exports.insertInNotification(row.ID,null,text,3,function(flg){
  1373. exports.insertInMobileNotification(row.ID,text,new Date());
  1374.  
  1375. //console.log(parcels);
  1376. destroy(db);
  1377. callback(true, true,row.email,text);
  1378. });
  1379. }
  1380. else {
  1381. text= "Angazovani ste na plantazama: "+par+" od strane "+user.Fname+" "+user.Lname+".";
  1382. exports.insertInNotification(row.ID,null,text,3,function(flg){
  1383. exports.insertInMobileNotification(row.ID,text,new Date());
  1384.  
  1385. sql = "INSERT INTO Permissions VALUES ";
  1386. var c = 0;
  1387. var arr = [];
  1388. parcels.forEach(parcel => {
  1389. if (c++ > 0) sql += ", ";
  1390.  
  1391. parcel.View = parcel.View ? 1 : 0;
  1392. parcel.Rules = parcel.Rules ? 1 : 0;
  1393. parcel.Edit = parcel.Edit ? 1 : 0;
  1394.  
  1395. sql += "(null,?,?,?,?,?)";
  1396. arr.push(parcel.Rules);
  1397. arr.push(parcel.View);
  1398. arr.push(parcel.Edit);
  1399. arr.push(row.ID);
  1400. arr.push(parcel.ID);
  1401.  
  1402. });
  1403. //console.log(sql);
  1404. db.run(sql,arr, function () {
  1405. destroy(db);
  1406.  
  1407. callback(true, true,row.email,text);
  1408. });
  1409.  
  1410. });
  1411. }
  1412. });
  1413. });
  1414. }
  1415. })
  1416.  
  1417.  
  1418. })
  1419. }
  1420.  
  1421.  
  1422. //destroy(db);
  1423. });
  1424.  
  1425. }
  1426.  
  1427. destroy = function (db) {
  1428. db.close();
  1429. }
  1430.  
  1431. getSHA1 = function (input) {
  1432. try {
  1433. return crypto.createHash('sha1').update(input).digest('hex');
  1434. }
  1435. catch (err) { return "" };
  1436. }
  1437.  
  1438. exports.addUrl = function (username, URL) {
  1439.  
  1440. var db = openConnection();
  1441. sql = "select * from PendingOwner where Username=?";
  1442. db.all(sql,[username.toLowerCase()], function (err, rows) {
  1443. if (rows.length > 0) {
  1444. sql = "Update PendingOwner set URL=? where Username=?";
  1445. db.run(sql,[URL,username.toLowerCase()], function () {
  1446. destroy(db);
  1447. });
  1448. }
  1449. else {
  1450. sql = "select *,`E-mail`as email from User where Username=?";
  1451. db.all(sql,[username.toLowerCase()], function (err1, rows1) {
  1452. sql = "INSERT INTO PendingOwner(Fname,Lname,Username,Password,`E-mail` ,Phone, PaymentType,URL) VALUES (?,?,?,?,?,?,?,?)";
  1453. db.run(sql,[rows1[0].Fname,rows1[0].Lname,rows1[0].Username.toLowerCase(),rows1[0].Password,rows1[0].email,rows1[0].Phone,rows1[0].PaymentType,URL], function () {
  1454. destroy(db);
  1455. });
  1456. });
  1457. }
  1458. });
  1459.  
  1460. }
  1461.  
  1462. exports.allParcels = function (callback) {
  1463.  
  1464. var db = openConnection();
  1465. sql = "SELECT ID,Title FROM Parcel";
  1466.  
  1467. db.all(sql, function (err, data) {
  1468. destroy(db);
  1469.  
  1470. callback(data);
  1471. })
  1472. }
  1473. exports.getAllParcels = function (ID, callback) {
  1474.  
  1475. var db = openConnection();
  1476. sql = "SELECT Parcel.ID, Parcel.Title FROM Parcel WHERE UserID =?";
  1477.  
  1478. db.all(sql,[ID], function (err, data) {
  1479. destroy(db);
  1480.  
  1481. callback(data);
  1482. })
  1483. }
  1484.  
  1485. exports.getAllCrops = function (ID, parcelID, callback) {
  1486.  
  1487. var db = openConnection();
  1488.  
  1489. sql = "SELECT ID,UserID FROM Parcel WHERE ID = ?";
  1490. db.all(sql,[parcelID], function (err, parcel) {
  1491. sql = "SELECT c.ID,c.Title, 'm'||scm.ID as scmID, sc.Title || ' - ' || m.Title as scmTitle FROM Crops c JOIN SubCrop sc ON c.ID = sc.CropsID JOIN SubCropOfManufacturer scm ON sc.ID = scm.SubCropID JOIN Manufacturer m ON scm.ManufacturerID = m.ID" +
  1492. " UNION " +
  1493. "SELECT c.ID, c.Title, 'c'||cc.ID as scmID, cc.Title as scmTitle FROM Crops c JOIN CustomSubCrop cc ON c.ID == cc.CropID WHERE cc.OwnerID = ?";
  1494.  
  1495. db.all(sql,[ID], function (err, mainCrops) {
  1496. var arr = [];
  1497. if (parcel[0].UserID == ID) {
  1498. sql = "SELECT c.ID, c.Title, 'c'||cc.ID as scmID, cc.Title as scmTitle FROM Crops c JOIN CustomSubCrop cc ON c.ID == cc.CropID WHERE cc.OwnerID IN (SELECT UserID FROM OwnerWithUser WHERE OwnerID = ?)";
  1499. arr.push(ID);
  1500. }
  1501. else {
  1502. sql = "SELECT c.ID, c.Title, 'c'||cc.ID as scmID, cc.Title as scmTitle FROM Crops c JOIN CustomSubCrop cc ON c.ID == cc.CropID WHERE cc.OwnerID = ?";
  1503. arr.push(parcel[0].UserID);
  1504. }
  1505.  
  1506. db.all(sql,arr, function (err, otherCrops) {
  1507.  
  1508. var ret = [];
  1509. //console.log(mainCrops);
  1510. //console.log(otherCrops);
  1511.  
  1512. mainCrops.forEach(crop => {
  1513. var tmp = ret.find(el => el.ID == crop.ID);
  1514.  
  1515. if (tmp) {
  1516. tmp.subcrops.push({
  1517. ID: crop.scmID,
  1518. title: crop.scmTitle
  1519. })
  1520. }
  1521. else {
  1522. ret.push({
  1523. ID: crop.ID,
  1524. title: crop.Title,
  1525. subcrops: [{
  1526. ID: crop.scmID,
  1527. title: crop.scmTitle
  1528. }]
  1529. })
  1530. }
  1531. });
  1532.  
  1533. otherCrops.forEach(crop => {
  1534. var tmp = ret.find(el => el.ID == crop.ID);
  1535.  
  1536. if (tmp) {
  1537. tmp.subcrops.push({
  1538. ID: crop.scmID,
  1539. title: crop.scmTitle
  1540. })
  1541. }
  1542. else {
  1543. ret.push({
  1544. ID: crop.ID,
  1545. title: crop.Title,
  1546. subcrops: [{
  1547. ID: crop.scmID,
  1548. title: crop.scmTitle
  1549. }]
  1550. })
  1551. }
  1552. });
  1553.  
  1554. destroy(db);
  1555.  
  1556. callback(ret);
  1557. });
  1558. });
  1559. });
  1560.  
  1561. }
  1562.  
  1563.  
  1564. exports.getAllCropsForNew = function (ID, callback) {
  1565.  
  1566. var db = openConnection();
  1567.  
  1568. sql = "SELECT c.ID,c.Title, 'm'||scm.ID as scmID, sc.Title || ' - ' || m.Title as scmTitle FROM Crops c JOIN SubCrop sc ON c.ID = sc.CropsID JOIN SubCropOfManufacturer scm ON sc.ID = scm.SubCropID JOIN Manufacturer m ON scm.ManufacturerID = m.ID" +
  1569. " UNION " +
  1570. "SELECT c.ID, c.Title, 'c'||cc.ID as scmID, cc.Title as scmTitle FROM Crops c JOIN CustomSubCrop cc ON c.ID == cc.CropID WHERE cc.OwnerID = ?";
  1571.  
  1572. db.all(sql,[ID], function (err, mainCrops) {
  1573. sql = "SELECT c.ID, c.Title, 'c'||cc.ID as scmID, cc.Title as scmTitle FROM Crops c JOIN CustomSubCrop cc ON c.ID == cc.CropID WHERE cc.OwnerID IN (SELECT UserID FROM OwnerWithUser WHERE OwnerID = ?)";
  1574.  
  1575. db.all(sql,[ID], function (err, otherCrops) {
  1576.  
  1577. var ret = [];
  1578. ////console.log(sql);
  1579.  
  1580. mainCrops.forEach(crop => {
  1581. var tmp = ret.find(el => el.ID = crop.ID);
  1582.  
  1583. if (tmp) {
  1584. tmp.subcrops.push({
  1585. ID: crop.scmID,
  1586. title: crop.scmTitle
  1587. })
  1588. }
  1589. else {
  1590. ret.push({
  1591. ID: crop.ID,
  1592. title: crop.Title,
  1593. subcrops: [{
  1594. ID: crop.scmID,
  1595. title: crop.scmTitle
  1596. }]
  1597. })
  1598. }
  1599. });
  1600.  
  1601. otherCrops.forEach(crop => {
  1602. var tmp = ret.find(el => el.ID = crop.ID);
  1603.  
  1604. if (tmp) {
  1605. tmp.subcrops.push({
  1606. ID: crop.scmID,
  1607. title: crop.scmTitle
  1608. })
  1609. }
  1610. else {
  1611. ret.push({
  1612. ID: crop.ID,
  1613. title: crop.Title,
  1614. subcrops: [{
  1615. ID: crop.scmID,
  1616. title: crop.scmTitle
  1617. }]
  1618. })
  1619. }
  1620. });
  1621.  
  1622. destroy(db);
  1623.  
  1624. callback(ret);
  1625. });
  1626. });
  1627. }
  1628.  
  1629. exports.getPossibleOwners = function (ID, callback) {
  1630.  
  1631. var db = openConnection();
  1632.  
  1633. sql = "SELECT ID, Fname || ' ' || Lname as Name FROM User u JOIN OwnerWithUser o ON u.ID = o.OwnerID WHERE (u.PaymentType = 3 OR (SELECT COUNT(*) FROM Parcel p2 WHERE p2.UserID = o.OwnerID)<u.PaymentType) AND o.UserID =?";
  1634.  
  1635. db.all(sql,[ID], function (err, rows) {
  1636. destroy(db);
  1637. callback(rows);
  1638. });
  1639. }
  1640.  
  1641. exports.getPossibleOwnersForSensors = function (ID, callback) {
  1642.  
  1643. var db = openConnection();
  1644.  
  1645. sql = "SELECT DISTINCT u.ID, Fname || ' ' || Lname as Name FROM User u JOIN Parcel p ON u.ID = p.UserID JOIN Permissions per ON p.ID = per.ParcelID WHERE per.Edit = 1 AND per.UserID =?";
  1646.  
  1647. db.all(sql,[ID], function (err, rows) {
  1648. // //console.log("\n-\n-\n-\n")
  1649. // //console.log(err);
  1650. // //console.log(rows);
  1651.  
  1652. destroy(db);
  1653. callback(rows);
  1654. });
  1655. }
  1656.  
  1657. exports.getParcelsForSensors = function (ID, callback) {
  1658.  
  1659. var db = openConnection();
  1660.  
  1661. sql = "SELECT ID, Title FROM Parcel WHERE UserID = ?";
  1662.  
  1663. db.all(sql,[ID], function (err, rows) {
  1664. destroy(db);
  1665. callback(rows);
  1666. });
  1667. }
  1668.  
  1669. exports.getOwnersParcels = function (ID, callback) {
  1670.  
  1671. var db = openConnection();
  1672.  
  1673. sql = "SELECT Parcel.Title,Parcel.ID FROM User JOIN Parcel ON User.ID = Parcel.UserID WHERE User.ID = ?" +
  1674. " UNION " +
  1675. "SELECT p.title,p.ID FROM Parcel p JOIN OwnerWithUser o ON p.UserID = o.OwnerID JOIN Permissions pm ON o.UserID = pm.UserID AND p.ID = pm.ParcelID WHERE pm.Rules = 1 AND o.UserID = ?";
  1676. db.all(sql,[ID,ID], function (err, rows) {
  1677.  
  1678. destroy(db);
  1679. callback(rows);
  1680. });
  1681. }
  1682.  
  1683. exports.getToDos = function (ID, callback) {
  1684.  
  1685. var db = openConnection();
  1686.  
  1687. sql = "SELECT td.*, u.Fname || ' ' || u.Lname as Name FROM ToDo td JOIN Parcel p ON td.ParcelID = p.ID JOIN User u ON td.UserID = u.ID WHERE p.UserID = ?";
  1688. db.all(sql,[ID], function (err, rows) {
  1689. destroy(db);
  1690. callback(rows);
  1691. });
  1692. }
  1693.  
  1694. exports.getAllParcelsForExpert = function (callback) {
  1695.  
  1696. var db = openConnection();
  1697.  
  1698. sql = "SELECT Parcel.ID FROM Parcel";
  1699. db.all(sql, function (err, rows) {
  1700.  
  1701. destroy(db);
  1702. callback(rows);
  1703. });
  1704. }
  1705.  
  1706. exports.checkExistance = function (username, callback) {
  1707.  
  1708. var db = openConnection();
  1709.  
  1710. sql = "SELECT ID FROM User WHERE Username = ? " +
  1711. "UNION " +
  1712. "SELECT ID FROM PendingOwner WHERE Username = ?";
  1713. db.all(sql,[username.toLowerCase(),username.toLowerCase()], function (err, rows) {
  1714.  
  1715. destroy(db);
  1716. callback(rows.length == 0);
  1717. });
  1718. }
  1719.  
  1720. exports.getWorkers = function (ID, callback) {
  1721.  
  1722. var db = openConnection();
  1723.  
  1724. sql = "SELECT Count(*) as num FROM OwnerWithUser WHERE OwnerID =?";
  1725. db.all(sql,[ID], function (err, rows) {
  1726. destroy(db);
  1727. callback(rows[0].num);
  1728. });
  1729. }
  1730. exports.getNotifNum = function (ID, callback) {
  1731.  
  1732. var db = openConnection();
  1733.  
  1734. sql = "SELECT Count(*) as num FROM Notification WHERE UserID =? and Seen=0";
  1735. db.all(sql,[ID], function (err, rows) {
  1736. //console.log(err);
  1737. destroy(db);
  1738. callback(rows[0].num);
  1739. });
  1740. }
  1741.  
  1742. exports.getShowCorny = function (ID, callback) {
  1743.  
  1744. var db = openConnection();
  1745.  
  1746. sql = "SELECT ShowCorny FROM User WHERE ID =?";
  1747. db.all(sql,[ID], function (err, rows) {
  1748.  
  1749. destroy(db);
  1750. callback(rows[0].ShowCorny);
  1751. });
  1752. }
  1753.  
  1754. exports.setShowCorny = function (ID, flag, callback) {
  1755.  
  1756. var db = openConnection();
  1757.  
  1758.  
  1759. if (flag) sql = "UPDATE User SET ShowCorny = 1 WHERE ID =?";
  1760. else sql = "UPDATE User SET ShowCorny = 0 WHERE ID =?";
  1761. db.run(sql,[ID], function (err) {
  1762. //console.log(err)
  1763. destroy(db);
  1764. callback();
  1765. });
  1766. }
  1767.  
  1768. exports.getParcelsCount = function (ID, callback) {
  1769.  
  1770. var db = openConnection();
  1771.  
  1772. sql = "SELECT Count(*) as num FROM Parcel WHERE UserID =?";
  1773. db.all(sql,[ID], function (err, rows) {
  1774. destroy(db);
  1775. callback(rows[0].num);
  1776. });
  1777. }
  1778. exports.getCalendar = function (ID, callback) {
  1779.  
  1780. var db = openConnection();
  1781.  
  1782. sql = "SELECT * FROM Calendar WHERE UserID =?";
  1783. db.all(sql,[ID], function (err, rows) {
  1784. destroy(db);
  1785. callback(rows);
  1786. });
  1787. }
  1788.  
  1789. exports.checkCalendar = function (ID, niz, callback) {
  1790. var now = new Date();
  1791. var db = openConnection();
  1792. sql = "SELECT * FROM Calendar WHERE UserID =?";
  1793. db.all(sql,[ID], function (err, rows) {
  1794. if (rows.length > 0) {
  1795. var nizID = "(";
  1796. var br = 0;
  1797. rows.forEach(function (element) {
  1798. var datum = new Date(element.Date);
  1799. if (((new DateDiff(now, datum)).days()) < 1 && ((new DateDiff(now, datum)).days()) > 0 && element.Seen == 0) {
  1800. niz.push("Danas je: " + datum.getDate() + "/" + datum.getMonth() + "/" + datum.getFullYear() + ", obavestenje: " + element.Title);
  1801. if (br == 0) {
  1802. br++;
  1803. nizID += "" + element.ID;
  1804. }
  1805. else {
  1806. nizID += "," + element.ID;
  1807. }
  1808. }
  1809. }, this);
  1810. nizID += ")";
  1811. sql = "update Calendar set Seen=1 where ID in ?";
  1812. db.run(sql,[nizID], function () {
  1813. destroy(db);
  1814. callback();
  1815. });
  1816. }
  1817. else {
  1818. destroy(db);
  1819. callback();
  1820. }
  1821.  
  1822. });
  1823.  
  1824. }
  1825.  
  1826. exports.getNotification = function (ID, callback) {
  1827.  
  1828. var db = openConnection();
  1829. sql = "Update Notification set Seen=1 where UserID=?";
  1830. db.run(sql,[ID], function () {
  1831. sql = "SELECT * FROM Notification WHERE UserID =?";
  1832. db.all(sql,[ID], function (err, rows) {
  1833. destroy(db);
  1834. callback(rows);
  1835. });
  1836. });
  1837. }
  1838.  
  1839. exports.insertInMobileNotification = function (userID, message, date) {
  1840. var db = openConnection();
  1841.  
  1842. sql = "INSERT INTO MobileNotifications(Message, UserID, Date, Type) VALUES (?,?,?,2)";
  1843.  
  1844. db.run(sql,[message,userID,date], function () {
  1845. destroy(db);
  1846. });
  1847. }
  1848.  
  1849. exports.insertInNotification = function (ID, parcelID, title, priority, callback) {
  1850.  
  1851. //console.log(callback);
  1852.  
  1853. if (priority == null) priority = 3;
  1854.  
  1855. var db = openConnection();
  1856. sql = "select * from Notification where Title=? and UserID=?";
  1857. db.all(sql,[title,ID], function (err, rows) {
  1858. if (rows.length == 0) {
  1859. sql = "Insert into Notification(Title,UserID,Priority,Date,ParcelID) VALUES(?,?,?,'" + new Date() + "',?)";
  1860. db.run(sql,[title,ID,priority,parcelID], function (err) {
  1861. destroy(db);
  1862. callback(true);
  1863. });
  1864. }
  1865. else {
  1866. sql = "Update Notification set Priority=? where ID=?";
  1867. db.run(sql,[priority,rows[0].ID], function () {
  1868. destroy(db);
  1869. callback(false);
  1870. });
  1871. }
  1872. });
  1873. }
  1874.  
  1875. exports.insertInNotificationForAll = function (ID, parcelID, title, priority, callback) {
  1876.  
  1877. //console.log(callback);
  1878.  
  1879. if (priority == null) priority = 3;
  1880.  
  1881. var db = openConnection();
  1882.  
  1883. sql = "SELECT UserID FROM Permissions WHERE ParcelID = ? UNION SELECT UserID FROM Parcel WHERE ID = ?";
  1884.  
  1885. db.all(sql,[parcelID,parcelID], function (err, data) {
  1886. var all = "(";
  1887. var i = 0;
  1888. data.forEach(el => {
  1889. if (i != 0) all += ",";
  1890. i++;
  1891.  
  1892. all += el.UserID;
  1893. });
  1894. all += ")";
  1895.  
  1896. sql = "select * from Notification where Title=? and UserID IN " + all;
  1897. db.all(sql,[title], function (err, rows) {
  1898. console.log(err);
  1899. console.log(rows);
  1900. recInsertNotif(db, title, ID, priority, parcelID, rows, data, 0, false, callback);
  1901. });
  1902. });
  1903. }
  1904.  
  1905. function recInsertNotif(db, title, ID, priority, parcelID, rows, data, i, flag, callback) {
  1906. //console.log("Call",i);
  1907. if (i == data.length) {
  1908. destroy(db);
  1909. callback(flag);
  1910. }
  1911. else {
  1912. //console.log(rows);
  1913. var tmp = rows.find(e => e.UserID == data[i].UserID);
  1914.  
  1915. if (tmp) {
  1916. sql = "Update Notification set Priority=? where ID=?";
  1917. db.run(sql,[priority,tmp.ID], function () {
  1918. recInsertNotif(db, title, ID, priority, parcelID, rows, data, i + 1, flag, callback);
  1919. });
  1920. }
  1921. else {
  1922. if (data[i].UserID == ID) flag = true;
  1923.  
  1924. sql = "Insert into Notification(Title,UserID,Priority,Date,ParcelID) VALUES(?,?,?,'" + new Date() + "',?)";
  1925. db.run(sql,[title,data[i].UserID,priority,parcelID], function (err) {
  1926. sql = "Insert into MobileNotifications(Message, UserID, Date) VALUES(?,?,'" + new Date() + "')";
  1927. db.run(sql,[title,data[i].UserID], function (err) {
  1928. recInsertNotif(db, title, ID, priority, parcelID, rows, data, i + 1, flag, callback);
  1929. });
  1930. });
  1931. }
  1932. }
  1933. }
  1934.  
  1935. exports.getNotificationsForMobile = function (ID, callback) {
  1936.  
  1937. var db = openConnection();
  1938.  
  1939. sql = "SELECT ID, Message as Title, Date, Type FROM MobileNotifications WHERE userID = ? AND Seen = 'FALSE'";
  1940.  
  1941. db.all(sql,[ID], function (err, data) {
  1942. var date = new Date(Date.now());
  1943.  
  1944. var filtered = data.filter(el => {
  1945. var tmp = new Date(el.Date);
  1946. return (el.Type == 1 || (tmp.getDate() == date.getDate() && tmp.getMonth() == date.getMonth()));
  1947. });
  1948.  
  1949. callback(filtered);
  1950.  
  1951. sql = "SELECT * FROM MobileNotifications WHERE Seen='TRUE'";
  1952. db.all(sql, function (err, res) {
  1953. if (res.length > 0) {
  1954. var all = "(";
  1955. var i = 0;
  1956.  
  1957. res.forEach(el => {
  1958. var tmp = new Date(el.Date);
  1959.  
  1960. if (new DateDiff(date, tmp).days() > 3) {
  1961. if (i != 0) all += ",";
  1962. i++;
  1963.  
  1964. all += "el.ID";
  1965. }
  1966. });
  1967.  
  1968. all += ")";
  1969.  
  1970. if (i != 0) {
  1971. sql = "DELETE FROM MobileNotifications WHERE ID IN " + all;
  1972.  
  1973. db.run(sql, function () {
  1974. if (filtered.length != 0) {
  1975. all = "(";
  1976. i = 0;
  1977. filtered.forEach(el => {
  1978. if (i != 0) all += ",";
  1979. i++;
  1980.  
  1981. all += el.ID;
  1982. });
  1983. all += ")"
  1984.  
  1985. sql = "UPDATE MobileNotifications SET Seen = 'TRUE' WHERE ID IN " + all;
  1986. db.run(sql, function () {
  1987. destroy(db);
  1988. });
  1989. }
  1990. else destroy(db);
  1991. });
  1992. }
  1993. else {
  1994. if (filtered.length != 0) {
  1995. all = "(";
  1996. i = 0;
  1997. filtered.forEach(el => {
  1998. if (i != 0) all += ",";
  1999. i++;
  2000.  
  2001. all += el.ID;
  2002. });
  2003. all += ")"
  2004.  
  2005. sql = "UPDATE MobileNotifications SET Seen = 'TRUE' WHERE ID IN " + all;
  2006. db.run(sql, function () {
  2007. destroy(db);
  2008. });
  2009. }
  2010. else destroy(db);
  2011. }
  2012. }
  2013. else {
  2014. if (filtered.length != 0) {
  2015. all = "(";
  2016. i = 0;
  2017. filtered.forEach(el => {
  2018. if (i != 0) all += ",";
  2019. i++;
  2020.  
  2021. all += el.ID;
  2022. });
  2023. all += ")"
  2024.  
  2025. sql = "UPDATE MobileNotifications SET Seen = 'TRUE' WHERE ID IN " + all;
  2026. db.run(sql, function () {
  2027. destroy(db);
  2028. });
  2029. }
  2030. else destroy(db);
  2031. }
  2032. });
  2033. });
  2034. };
  2035.  
  2036. exports.deleteFromNotification = function (ID, title, date) {
  2037.  
  2038. var db = openConnection();
  2039.  
  2040. sql = "Delete from Notification where UserID=? and Title like ?";
  2041. db.run(sql,[ID,title], function () {
  2042. destroy(db);
  2043. });
  2044. }
  2045.  
  2046. exports.deleteNotification = function (ID) {
  2047.  
  2048. var db = openConnection();
  2049.  
  2050. sql = "Delete from Notification where ID=?";
  2051.  
  2052. db.run(sql,[ID], function (err) {
  2053. destroy(db);
  2054. });
  2055. }
  2056. exports.insertInCalendar = function (ID, title, date, priority) {
  2057.  
  2058. var db = openConnection();
  2059.  
  2060. sql = "Insert into Calendar(Title,UserID,Date,Priority) VALUES(?,?,?,?)";
  2061. db.run(sql,[title,ID,date,priority], function () {
  2062. destroy(db);
  2063. });
  2064. }
  2065. exports.deleteFromCalendar = function (ID, title, date) {
  2066. console.log(date);
  2067. var db = openConnection();
  2068.  
  2069. sql = "Delete from Calendar where UserID=? and Title like ? and Date like ?";
  2070. db.run(sql,[ID,title,date], function () {
  2071. sql = "Delete from MobileNotifications where userID=? and Message like ? and Date like ?";
  2072. db.run(sql,[ID,title,date], function (err) {
  2073. console.log(err);
  2074. destroy(db);
  2075. });
  2076. });
  2077. }
  2078.  
  2079. exports.getAllParcelsForRules = function (ID, callback) {
  2080.  
  2081. var db = openConnection();
  2082.  
  2083. sql = "SELECT DISTINCT p.ID, p.MiddleLatitude as lat, p.MiddleLongitude as lng,CropID " +
  2084. "FROM (SELECT p.ID,p.MiddleLatitude, p.MiddleLongitude FROM Parcel p WHERE p.UserID = ?" + " " +
  2085. "UNION " +
  2086. "SELECT p.ID,p.MiddleLatitude, p.MiddleLongitude FROM Parcel p JOIN Permissions pm ON p.ID = pm.ParcelID WHERE pm.View = 1 AND pm.UserID = ?" + ") p " +
  2087. "JOIN SubCropOnParcel sc ON p.ID = sc.ParcelID " +
  2088. "JOIN CustomSubCrop csp ON sc.CustomCropID = csp.CropID " +
  2089. "UNION " +
  2090. "SELECT DISTINCT p.ID, p.MiddleLatitude as lat, p.MiddleLongitude as lng,CropsID " +
  2091. "FROM (SELECT p.ID,p.MiddleLatitude, p.MiddleLongitude FROM Parcel p WHERE p.UserID = ?" + " " +
  2092. "UNION " +
  2093. "SELECT p.ID,p.MiddleLatitude, p.MiddleLongitude FROM Parcel p JOIN Permissions pm ON p.ID = pm.ParcelID WHERE pm.View = 1 AND pm.UserID = ?"+ ") p " +
  2094. "JOIN SubCropOnParcel sc ON p.ID = sc.ParcelID " +
  2095. "JOIN SubCropOfManufacturer scm ON sc.ManufacturersCropID = scm.ID " +
  2096. "JOIN SubCrop sub ON scm.SubCropID = sub.ID";
  2097.  
  2098. db.all(sql,[ID,ID,ID,ID], function (err, rows) {
  2099. //console.log(sql);
  2100. //console.log(err);
  2101. //console.log(rows);
  2102.  
  2103. if (err) callback([]);
  2104. else callback(rows);
  2105. });
  2106. }
  2107.  
  2108. exports.getAllParcelsForIntervalRules = function (callback) {
  2109.  
  2110. var db = openConnection();
  2111.  
  2112. sql = "SELECT DISTINCT p.ID, p.MiddleLatitude as lat, p.MiddleLongitude as lng,CropID " +
  2113. "FROM (SELECT p.ID,p.MiddleLatitude, p.MiddleLongitude FROM Parcel p ) p " +
  2114. "JOIN SubCropOnParcel sc ON p.ID = sc.ParcelID " +
  2115. "JOIN CustomSubCrop csp ON sc.CustomCropID = csp.CropID " +
  2116. "UNION " +
  2117. "SELECT DISTINCT p.ID, p.MiddleLatitude as lat, p.MiddleLongitude as lng,CropsID " +
  2118. "FROM (SELECT p.ID,p.MiddleLatitude, p.MiddleLongitude FROM Parcel p ) p " +
  2119. "JOIN SubCropOnParcel sc ON p.ID = sc.ParcelID " +
  2120. "JOIN SubCropOfManufacturer scm ON sc.ManufacturersCropID = scm.ID " +
  2121. "JOIN SubCrop sub ON scm.SubCropID = sub.ID";
  2122.  
  2123. db.all(sql, function (err, rows) {
  2124. //console.log(sql);
  2125. //console.log(err);
  2126. //console.log(rows);
  2127.  
  2128. if (err) callback([]);
  2129. else callback(rows);
  2130. });
  2131. }
  2132.  
  2133. exports.getParcelIDs = function (ID, callback) {
  2134. sql = "SELECT ID FROM Parcel WHERE UserID = ?";
  2135.  
  2136. var db = openConnection();
  2137.  
  2138. db.all(sql,[ID], function (err, data) {
  2139. destroy(db);
  2140.  
  2141. callback(data);
  2142. });
  2143. }
  2144.  
  2145. exports.getPaymentType = function (ID, callback) {
  2146. sql = "SELECT PaymentType as type FROM User WHERE ID = ?";
  2147.  
  2148. var db = openConnection();
  2149.  
  2150. db.all(sql,[ID], function (err, data) {
  2151. destroy(db);
  2152.  
  2153. callback(data[0].type);
  2154. });
  2155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement