summaryrefslogtreecommitdiff
path: root/scripts/customer.pl
blob: c1cee521df771c65c3c9b068a4ec5c22c72a4826 (plain)
  1. #!/usr/bin/perl
  2. =pod
  3. =head1 NAME
  4. LedgerSMB::Scripts::customer - LedgerSMB class defining the Controller
  5. functions, template instantiation and rendering for customer editing and display.
  6. =head1 SYOPSIS
  7. This module is the UI controller for the customer DB access; it provides the
  8. View interface, as well as defines the Save customer.
  9. Save customer will update or create as needed.
  10. =head1 METHODS
  11. =cut
  12. package LedgerSMB::Scripts::customer;
  13. use LedgerSMB::Template;
  14. use LedgerSMB::DBObject::Customer;
  15. require 'lsmb-request.pl';
  16. =pod
  17. =over
  18. =item get($self, $request, $user)
  19. Requires form var: id
  20. Extracts a single customer from the database, using its company ID as the primary
  21. point of uniqueness. Shows (appropriate to user privileges) and allows editing
  22. of the customer informations.
  23. =back
  24. =cut
  25. sub get {
  26. my ($request) = @_;
  27. my $customer = LedgerSMB::DBObject::Customer->new(base => $request, copy => 'all');
  28. $customer->set( entity_class=> '2' );
  29. my $result = $customer->get();
  30. my $template = LedgerSMB::Template->new( user => $user,
  31. template => 'Customer/customer', language => $user->{language},
  32. format => 'HTML');
  33. $template->render($results);
  34. }
  35. sub add_location {
  36. my ($request) = @_;
  37. my $customer = LedgerSMB::DBObject::Customer->new({base => $request, copy => 'all'});
  38. $customer->set( entity_class=> '2' );
  39. $customer->save_location();
  40. $customer->get();
  41. $customer->get_metadata();
  42. my $template = LedgerSMB::Template->new(
  43. user => $user,
  44. template => 'customer',
  45. path => 'UI/Customer',
  46. locale => $request->{_locale},
  47. format => 'HTML');
  48. $request->{script} = 'Customer/customer';
  49. $template->render($customer);
  50. }
  51. =pod
  52. =over
  53. =item add
  54. This method creates a blank screen for entering a customer's information.
  55. =back
  56. =cut
  57. sub add {
  58. my ($request) = @_;
  59. my $customer = LedgerSMB::DBObject::Customer->new(base => $request, copy => 'all');
  60. _render_main_screen($customer);
  61. }
  62. =pod
  63. =over
  64. =item search($self, $request, $user)
  65. Requires form var: search_pattern
  66. Directly calls the database function search, and returns a set of all customers
  67. found that match the search parameters. Search parameters search over address
  68. as well as customer/Company name.
  69. =back
  70. =cut
  71. sub search {
  72. my ($request) = @_;
  73. if ($request->type() eq 'POST') {
  74. # assume it's asking us to do the search, now
  75. my $customer = LedgerSMB::DBObject::Customer->new(base => $request, copy => 'all');
  76. $customer->set(entity_class=>2);
  77. my $results = $customer->search($customer->{search_pattern});
  78. my $template = LedgerSMB::Template->new( user => $user,
  79. template => 'Customer/customer', language => $user->{language},
  80. format => 'HTML');
  81. $template->render($results);
  82. }
  83. else {
  84. # grab the happy search page out.
  85. my $template = LedgerSMB::Template->new(
  86. user => $user,
  87. path => 'UI/Customer' ,
  88. template => 'customer_search',
  89. locale => $request->{_locale},
  90. format => 'HTML');
  91. $template->render();
  92. }
  93. }
  94. =pod
  95. =over
  96. =item save($self, $request, $user)
  97. Saves a customer to the database. The function will update or insert a new
  98. customer as needed, and will generate a new Company ID for the customer if needed.
  99. =back
  100. =cut
  101. sub save {
  102. my ($request) = @_;
  103. my $customer = LedgerSMB::DBObject::Customer->new({base => $request});
  104. $customer->save();
  105. _render_main_screen($customer);
  106. }
  107. sub edit{
  108. my $request = shift @_;
  109. my $customer = LedgerSMB::DBObject::Customer->new({base => $request});
  110. $customer->get();
  111. _render_main_screen($customer);
  112. }
  113. sub _render_main_screen{
  114. my $customer = shift @_;
  115. $customer->get_metadata();
  116. $customer->{creditlimit} = "$customer->{creditlimit}";
  117. $customer->{discount} = "$customer->{discount}";
  118. my $template = LedgerSMB::Template->new(
  119. user => $customer->{_user},
  120. template => 'customer',
  121. locale => $customer->{_locale},
  122. path => 'UI/Customer',
  123. format => 'HTML'
  124. );
  125. $template->render($customer);
  126. }
  127. sub save_contact {
  128. my ($request) = @_;
  129. my $customer = LedgerSMB::DBObject::Customer->new({base => $request});
  130. $customer->save_contact();
  131. $customer->get;
  132. _render_main_screen($customer);
  133. }
  134. sub save_bank_account {
  135. my ($request) = @_;
  136. my $customer = LedgerSMB::DBObject::Customer->new({base => $request});
  137. $customer->save_bank_account();
  138. $customer->get;
  139. _render_main_screen($customer);
  140. }
  141. 1;