View | Details | Raw Unified | Return to bug 22393
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt (-42 / +63 lines)
Lines 24-74 Link Here
24
        <div class="col-sm-10 col-sm-push-2">
24
        <div class="col-sm-10 col-sm-push-2">
25
            <main>
25
            <main>
26
26
27
            [% INCLUDE 'members-toolbar.inc' %]
27
                [% INCLUDE 'members-toolbar.inc' %]
28
    
29
                <!-- The manual invoice and credit buttons -->
30
                <div class="statictabs">
31
                    <ul>
32
                        <li><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | uri %]">Transactions</a></li>
33
                        <li><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Make a payment</a></li>
34
                        <li class="active"><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual invoice</a></li>
35
                        <li><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual credit</a></li>
36
                    </ul>
37
                    <div class="tabs-container">
28
38
29
            <!-- The manual invoice and credit buttons -->
39
                        [% If error %]
30
            <div class="statictabs">
40
                        <div class="dialog alert %]">
31
                <ul>
41
                            An error ocurred when adding this manual invoice: 
32
                    <li><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | uri %]">Transactions</a></li>
42
                            [% SWITCH error %]
33
                    <li><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Make a payment</a></li>
43
                            [% CASE 'debit_type_code' %]
34
                    <li class="active"><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual invoice</a></li>
44
                                Debit type not found.
35
                    <li><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual credit</a></li>
45
                            [% CASE 'itemnumber' %]
36
                </ul>
46
                                Item not found.
37
                <div class="tabs-container">
47
                            [% CASE 'register_id' %]
48
                                Cash register not found.
49
                            [% CASE '1' %]
50
                                An unhandled error occured, please check your logs
51
                            [% END %]
52
                        </div>
53
                        [% END %]
38
54
39
                [% IF ( ERROR ) %]
55
                        <form action="/cgi-bin/koha/members/maninvoice.pl" method="post" id="maninvoice"><input type="hidden" name="borrowernumber" id="borrowernumber" value="[% patron.borrowernumber | html %]" />
40
                [% IF ( ITEMNUMBER ) %]
56
                            <input type="hidden" name="csrf_token" value="[% csrf_token | html %]" />
41
                  ERROR an invalid itemnumber was entered, please hit back and try again
57
                            <fieldset class="rows">
42
                [% END %]
58
                                <legend>Manual invoice</legend>
43
                [% ELSE %]
59
                                <ol>
44
                <form action="/cgi-bin/koha/members/maninvoice.pl" method="post" id="maninvoice"><input type="hidden" name="borrowernumber" id="borrowernumber" value="[% patron.borrowernumber | html %]" />
60
                                    <li>
45
                    <input type="hidden" name="csrf_token" value="[% csrf_token | html %]" />
61
                                        <label for="type">Type: </label>
46
            <fieldset class="rows">
62
                                        <select name="type" id="type">
47
            <legend>Manual invoice</legend>
63
                                            [% FOREACH debit_type IN debit_types %]
48
            <ol>
64
                                            <option value="[% debit_type.code | html %]">[% debit_type.description | html %]</option>
49
                      <li>
65
                                            [% END %]
50
                        <label for="type">Type: </label>
66
                                        </select>
51
                        <select name="type" id="type">
67
                                    </li>
52
                          [% FOREACH debit_type IN debit_types %]
68
                                    <li>
53
                            <option value="[% debit_type.code | html %]">[% debit_type.description | html %]</option>
69
                                        <label for="barcode">Barcode: </label>
54
                          [% END %]
70
                                        <input type="text" name="barcode" id="barcode" />
55
                        </select>
71
                                    </li>
56
                      </li>
72
                                    <li>
57
              <li><label for="barcode">Barcode: </label><input type="text" name="barcode" id="barcode" /></li>
73
                                        <label for="desc">Description: </label>
58
                      <li><label for="desc">Description: </label><input type="text" name="desc" id="desc" size="50" /></li>
74
                                        <input type="text" name="desc" id="desc" size="50" />
59
                      <li><label for="note">Note: </label><input type="text" name="note" size="50" id="note" /></li>
75
                                    </li>
60
                      <li><label for="amount">Amount: </label><input type="number" name="amount" id="amount" required="required" value="" step="any" min="0" /> Example: 5.00</li>
76
                                    <li>
61
            </ol>
77
                                        <label for="note">Note: </label>
62
                    </fieldset>
78
                                        <input type="text" name="note" size="50" id="note" />
63
                    <fieldset class="action">
79
                                    </li>
64
                        <input type="submit" name="add" value="Save" /> <a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a>
80
                                    <li>
65
                    </fieldset>
81
                                        <label for="amount">Amount: </label>
66
                </form>
82
                                        <input type="number" name="amount" id="amount" required="required" value="" step="any" min="0" /> Example: 5.00
67
83
                                    </li>
68
                [% END %]
84
                                </ol>
85
                            </fieldset>
86
        
87
                            <fieldset class="action">
88
                                <input type="submit" name="add" value="Save" /> <a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a>
89
                            </fieldset>
90
                        </form>
91
                    </div>
69
                </div>
92
                </div>
70
            </div>
71
72
            </main>
93
            </main>
73
        </div> <!-- /.col-sm-10.col-sm-push-2 -->
94
        </div> <!-- /.col-sm-10.col-sm-push-2 -->
74
95
(-)a/members/maninvoice.pl (-50 / +70 lines)
Lines 23-28 Link Here
23
# along with Koha; if not, see <http://www.gnu.org/licenses>.
23
# along with Koha; if not, see <http://www.gnu.org/licenses>.
24
24
25
use Modern::Perl;
25
use Modern::Perl;
26
use Try::Tiny;
26
27
27
use C4::Auth;
28
use C4::Auth;
28
use C4::Output;
29
use C4::Output;
Lines 60-65 unless ($patron) { Link Here
60
    exit;
61
    exit;
61
}
62
}
62
63
64
my $logged_in_user = Koha::Patrons->find($loggedinuser);
65
output_and_exit_if_error(
66
    $input, $cookie,
67
    $template,
68
    {
69
        module         => 'members',
70
        logged_in_user => $logged_in_user,
71
        current_patron => $patron
72
    }
73
);
74
63
my $library_id = C4::Context->userenv->{'branch'};
75
my $library_id = C4::Context->userenv->{'branch'};
64
76
65
my $add = $input->param('add');
77
my $add = $input->param('add');
Lines 72-105 if ($add) { Link Here
72
        }
84
        }
73
      );
85
      );
74
86
75
# Note: If the logged in user is not allowed to see this patron an invoice can be forced
87
    # Note: If the logged in user is not allowed to see this patron an invoice can be forced
76
# Here we are trusting librarians not to hack the system
88
    # Here we are trusting librarians not to hack the system
89
    my $desc       = $input->param('desc');
90
    my $amount     = $input->param('amount');
91
    my $note       = $input->param('note');
92
    my $debit_type = $input->param('type');
93
94
    # If LOST try to match barcode to Item and then try to match Item + Borrower to an Issue.
95
    my $item_id;
77
    my $barcode = $input->param('barcode');
96
    my $barcode = $input->param('barcode');
78
    my $itemnum;
79
    if ($barcode) {
97
    if ($barcode) {
80
        my $item = Koha::Items->find( { barcode => $barcode } );
98
        my $item = Koha::Items->find( { barcode => $barcode } );
81
        $itemnum = $item->itemnumber if $item;
99
        $item_id = $item->itemnumber if $item;
82
    }
100
    }
83
    my $desc   = $input->param('desc');
101
    my $issue_id;
84
    my $amount = $input->param('amount');
102
    if ( $debit_type eq 'LOST' && $item_id ) {
85
    my $type   = $input->param('type');
103
        my $checkouts = Koha::Checkouts->search(
86
    my $note   = $input->param('note');
104
            { itemnumber => $item_id, borrowernumber => $borrowernumber } );
87
    my $error =
105
        my $checkout =
88
      C4::Accounts::manualinvoice( $borrowernumber, $itemnum, $desc, $type,
106
            $checkouts->count
89
        $amount, $note );
107
          ? $checkouts->next
90
    if ($error) {
108
          : Koha::Old::Checkouts->search(
91
        if ( $error =~ /FOREIGN KEY/ && $error =~ /itemnumber/ ) {
109
            { itemnumber => $item_id, borrowernumber => $borrowernumber },
92
            $template->param( 'ITEMNUMBER' => 1 );
110
            { order_by   => { -desc => 'returndate' }, rows => 1 }
93
        }
111
        )->next;
94
        $template->param(
112
        $issue_id = $checkout ? $checkout->issue_id : undef;
95
            csrf_token => Koha::Token->new->generate_csrf(
96
                { session_id => scalar $input->cookie('CGISESSID') }
97
            )
98
        );
99
        $template->param( 'ERROR' => $error );
100
        output_html_with_http_headers $input, $cookie, $template->output;
101
    }
113
    }
102
    else {
114
115
    try {
116
        $patron->account->add_debit(
117
            {
118
                amount      => $amount,
119
                description => $desc,
120
                note        => $note,
121
                user_id     => $logged_in_user->borrowernumber,
122
                interface   => 'intranet',
123
                library_id  => $library_id,
124
                type        => $debit_type,
125
                item_id     => $item_id,
126
                issue_id    => $issue_id
127
            }
128
        );
103
129
104
        if ( C4::Context->preference('AccountAutoReconcile') ) {
130
        if ( C4::Context->preference('AccountAutoReconcile') ) {
105
            $patron->account->reconcile_balance;
131
            $patron->account->reconcile_balance;
Lines 110-140 if ($add) { Link Here
110
        );
136
        );
111
        exit;
137
        exit;
112
    }
138
    }
113
}
139
    catch {
114
else {
140
        my $error = $_;
115
141
        if ( ref($error) eq 'Koha::Exceptions::Object::FKConstraint' ) {
116
    my $logged_in_user = Koha::Patrons->find($loggedinuser)
142
            $template->param( error => $error->broken_fk );
117
      or die "Not logged in";
143
        } else {
118
    output_and_exit_if_error(
144
            $template->param( error => '1' );
119
        $input, $cookie,
120
        $template,
121
        {
122
            module         => 'members',
123
            logged_in_user => $logged_in_user,
124
            current_patron => $patron
125
        }
145
        }
126
    );
146
    }
127
128
    my @debit_types = Koha::Account::DebitTypes->search_with_library_limits(
129
        { can_be_added_manually => 1, archived => 0 },
130
        {}, $library_id );
131
    $template->param( debit_types => \@debit_types );
132
    $template->param(
133
        csrf_token => Koha::Token->new->generate_csrf(
134
            { session_id => scalar $input->cookie('CGISESSID') }
135
        ),
136
        patron    => $patron,
137
        finesview => 1,
138
    );
139
    output_html_with_http_headers $input, $cookie, $template->output;
140
}
147
}
141
- 
148
149
my @debit_types = Koha::Account::DebitTypes->search_with_library_limits(
150
    { can_be_added_manually => 1, archived => 0 },
151
    {}, $library_id );
152
153
$template->param(
154
    debit_types => \@debit_types,
155
    csrf_token  => Koha::Token->new->generate_csrf(
156
        { session_id => scalar $input->cookie('CGISESSID') }
157
    ),
158
    patron    => $patron,
159
    finesview => 1,
160
);
161
output_html_with_http_headers $input, $cookie, $template->output;

Return to bug 22393