summaryrefslogtreecommitdiff
path: root/LedgerSMB/HR.pm
blob: 16c1dab64115dcaca7597b0fff7fa594f5426912 (plain)
  1. #=====================================================================
  2. # LedgerSMB
  3. # Small Medium Business Accounting software
  4. # http://www.ledgersmb.org/
  5. #
  6. # Copyright (C) 2006
  7. # This work contains copyrighted information from a number of sources all used
  8. # with permission.
  9. #
  10. # This file contains source code included with or based on SQL-Ledger which
  11. # is Copyright Dieter Simader and DWS Systems Inc. 2000-2005 and licensed
  12. # under the GNU General Public License version 2 or, at your option, any later
  13. # version. For a full list including contact information of contributors,
  14. # maintainers, and copyright holders, see the CONTRIBUTORS file.
  15. #
  16. # Original Copyright Notice from SQL-Ledger 2.6.17 (before the fork):
  17. # Copyright (C) 2003
  18. #
  19. # Author: DWS Systems Inc.
  20. # Web: http://www.sql-ledger.org
  21. #
  22. # Contributors:
  23. #
  24. #======================================================================
  25. #
  26. # This file has NOT undergone whitespace cleanup.
  27. #
  28. #======================================================================
  29. #
  30. # backend code for human resources and payroll
  31. #
  32. #======================================================================
  33. package HR;
  34. sub get_employee {
  35. my ($self, $myconfig, $form) = @_;
  36. my $dbh = $form->{dbh};
  37. my $query;
  38. my $sth;
  39. my $ref;
  40. my $notid = "";
  41. if ($form->{id}) {
  42. $query = qq|SELECT e.* FROM employee e WHERE e.id = ?|;
  43. $sth = $dbh->prepare($query);
  44. $sth->execute($form->{id}) || $form->dberror(__FILE__.':'.__LINE__.':'.$query);
  45. $ref = $sth->fetchrow_hashref(NAME_lc);
  46. # check if employee can be deleted, orphaned
  47. $form->{status} = "orphaned" unless $ref->{login};
  48. $ref->{employeelogin} = $ref->{login};
  49. delete $ref->{login};
  50. for (keys %$ref) { $form->{$_} = $ref->{$_} }
  51. $sth->finish;
  52. # get manager
  53. $form->{managerid} *= 1;
  54. $sth = $dbh->prepare("SELECT name FROM employee WHERE id = ?");
  55. $sth->execute($form->{managerid});
  56. ($form->{manager}) = $sth->fetchrow_array;
  57. $notid = qq|AND id != |.$dbh->quote($form->{id});
  58. } else {
  59. ($form->{startdate}) = $dbh->selectrow_array("SELECT current_date");
  60. }
  61. # get managers
  62. $query = qq|
  63. SELECT id, name
  64. FROM employee
  65. WHERE sales = '1'
  66. AND role = 'manager'
  67. $notid
  68. ORDER BY 2|;
  69. $sth = $dbh->prepare($query);
  70. $sth->execute || $form->dberror(__FILE__.':'.__LINE__.':'.$query);
  71. while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
  72. push @{ $form->{all_manager} }, $ref;
  73. }
  74. $sth->finish;
  75. }
  76. sub save_employee {
  77. my ($self, $myconfig, $form) = @_;
  78. my $dbh = $form->{dbh};
  79. my $query;
  80. my $sth;
  81. if (! $form->{id}) {
  82. my $uid = localtime;
  83. $uid .= "$$";
  84. $query = qq|INSERT INTO employee (name) VALUES ('$uid')|;
  85. $dbh->do($query) || $form->dberror(__FILE__.':'.__LINE__.':'.$query);
  86. $query = qq|SELECT id FROM employee WHERE name = '$uid'|;
  87. $sth = $dbh->prepare($query);
  88. $sth->execute || $form->dberror(__FILE__.':'.__LINE__.':'.$query);
  89. ($form->{id}) = $sth->fetchrow_array;
  90. $sth->finish;
  91. }
  92. my ($null, $managerid) = split /--/, $form->{manager};
  93. $managerid *= 1;
  94. $form->{sales} *= 1;
  95. $form->{employeenumber} = $form->update_defaults(
  96. $myconfig, "employeenumber", $dbh)
  97. if ! $form->{employeenumber};
  98. $query = qq|
  99. UPDATE employee
  100. SET employeenumber = ?,
  101. name = ?,
  102. address1 = ?,
  103. address2 = ?,
  104. city = ?,
  105. state = ?,
  106. zipcode = ?,
  107. country = ?,
  108. workphone = ?,
  109. homephone = ?,
  110. startdate = ?,
  111. enddate = ?,
  112. notes = ?,
  113. role = ?,
  114. sales = ?,
  115. email = ?,
  116. ssn = ?,
  117. dob = ?,
  118. iban = ?,
  119. bic = ?,
  120. managerid = ?
  121. WHERE id = ?|;
  122. $sth = $dbh->prepare($query);
  123. $form->db_prepare_vars('startdate', 'enddate');
  124. $sth->execute(
  125. $form->{employeenumber}, $form->{name}, $form->{address1},
  126. $form->{address2}, $form->{city}, $form->{state},
  127. $form->{zipcode}, $form->{country}, $form->{workphone},
  128. $form->{homephone}, $form->{startdate}, $form->{enddate},
  129. $form->{notes}, $form->{role}, $form->{sales}, $form->{email},
  130. $form->{ssn}, $form->{dob}, $form->{iban}, $form->{bic},
  131. $managerid, $form->{id}
  132. ) || $form->dberror(__FILE__.':'.__LINE__.':'.$query);
  133. $dbh->commit;
  134. }
  135. sub delete_employee {
  136. my ($self, $myconfig, $form) = @_;
  137. # connect to database
  138. my $dbh = $form->{dbh};
  139. # delete employee
  140. my $query = qq|
  141. DELETE FROM employee
  142. WHERE id = |.$dbh->quote($form->{id});
  143. $dbh->do($query) || $form->dberror(__FILE__.':'.__LINE__.':'.$query);
  144. $dbh->commit;
  145. }
  146. sub employees {
  147. my ($self, $myconfig, $form) = @_;
  148. # connect to database
  149. my $dbh = $form->{dbh};
  150. my $where = "1 = 1";
  151. $form->{sort} = ($form->{sort}) ? $form->{sort} : "name";
  152. my @a = qw(name);
  153. my $sortorder = $form->sort_order(\@a);
  154. my $var;
  155. if ($form->{startdatefrom}) {
  156. $where .= " AND e.startdate >= ".
  157. $dbh->quote($form->{startdatefrom});
  158. }
  159. if ($form->{startdateto}) {
  160. $where .= " AND e.startddate <= ".
  161. $dbh->quote($form->{startdateto});
  162. }
  163. if ($form->{name} ne "") {
  164. $var = $dbh->quote($form->like(lc $form->{name}));
  165. $where .= " AND lower(e.name) LIKE $var";
  166. }
  167. if ($form->{notes} ne "") {
  168. $var = $dbh->quote($form->like(lc $form->{notes}));
  169. $where .= " AND lower(e.notes) LIKE $var";
  170. }
  171. if ($form->{sales} eq 'Y') {
  172. $where .= " AND e.sales = '1'";
  173. }
  174. if ($form->{status} eq 'orphaned') {
  175. $where .= qq| AND e.login IS NULL|;
  176. }
  177. if ($form->{status} eq 'active') {
  178. $where .= qq| AND e.enddate IS NULL|;
  179. }
  180. if ($form->{status} eq 'inactive') {
  181. $where .= qq| AND e.enddate <= current_date|;
  182. }
  183. my $query = qq|
  184. SELECT e.*, m.name AS manager
  185. FROM employee e
  186. LEFT JOIN employee m ON (m.id = e.managerid)
  187. WHERE $where
  188. ORDER BY $sortorder|;
  189. my $sth = $dbh->prepare($query);
  190. $sth->execute || $form->dberror(__FILE__.':'.__LINE__.':'.$query);
  191. while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
  192. $ref->{address} = "";
  193. for (qw(address1 address2 city state zipcode country)) {
  194. $ref->{address} .= "$ref->{$_} ";
  195. }
  196. push @{ $form->{all_employee} }, $ref;
  197. }
  198. $sth->finish;
  199. $dbh->commit;
  200. }
  201. 1;