=pod

=head1 NAME

LedgerSMB::Scripts::inventory - LedgerSMB class defining the Controller
functions, template instantiation and rendering for inventory management.

=head1 SYOPSIS

This module is the UI controller for the customer DB access; it provides the 
View interface, as well as defines the Save customer. 
Save customer will update or create as needed.


=head1 METHODS

=cut

package LedgerSMB::Scripts::customer;

use LedgerSMB::Template;
use LedgerSMB::DBObject::Customer;

require 'lsmb-request.pl';

=over

=item begin_adjust

This entry point specifies the screen for setting up an inventory adjustment.

=back

=cut

sub begin_adjust {
    my ($request) = @_;
    my $template = LedgerSMB::Template->new( 
	user => $request->{_user}, 
    	template => 'adjustment_setup', 
	locale => $request->{_locale},
	path => 'UI/inventory',
        format => 'HTML'
    );
    $template->render($request);
}

=over

=item enter_adjust

This entry point specifies the screen for entering an inventory adjustment.

=back

=cut

sub enter_adjust {
    my ($request) = @_;
    my $adjustment = LedgerSMB::DBObject::Inventory->new(base => $request);
    my $template = LedgerSMB::Template->new(
	user => $request->{_user}, 
    	template => 'adjustment_entry', 
	locale => $request->{_locale},
	path => 'UI/inventory',
        format => 'HTML'
    );
    $template->render($adjustment);
}


=over

=item adjustment_next

This function is triggered on the next button on the adjustment entry screen.
It retrieves inventory information, calculates adjustment values, and displays the
screen.

=back

=cut

sub adjustment_next {
    my ($request) = @_;
    my $adjustment = LedgerSMB::DBObject::Inventory->new(base => $request);
    for my $i (1 .. $adjustment->{rowcount}){
        if ($adjustment->{"row_$i"} eq "new"){
            my $item = $adjustment->retrieve_item_at_date(
		$adjustment->{"partnumber_new_$i"});
            $adjustment->{"row_$i"} = $item->{id};
            $adjustment->{"description_$i"} = $item->{description};
            $adjustment->{"onhand_$i"} = $item->{onhand}};
        }
        $adjustment->{"qty_$i"} = $adjustment->{"onhand_$i"} 
		- $adjustment->{"counted_$i"}; 
    }
    ++$adjustment->{rowcount};
    enter_adjust($adjustment);
}

=over

=item adjustment_save

This function saves the inventory adjustment report and then creates the required
invoices.

=back

=cut

sub adjustment_save {
    my ($request) = @_;
    my $adjustment = LedgerSMB::DBObject::Inventory->new(base => $request);
    $adjustment->save;
    begin_adjust($request);
} 

1;