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

(-)a/C4/Letters.pm (-1 / +140 lines)
Lines 44-50 BEGIN { Link Here
44
    $VERSION = 3.07.00.049;
44
    $VERSION = 3.07.00.049;
45
    @ISA = qw(Exporter);
45
    @ISA = qw(Exporter);
46
    @EXPORT = qw(
46
    @EXPORT = qw(
47
        &GetLetters &GetPreparedLetter &GetWrappedLetter &addalert &getalert &delalert &findrelatedto &SendAlerts &GetPrintMessages &GetMessageTransportTypes
47
        &GetLetters &GetLettersAvailableForALibrary &GetLetterTemplates &DelLetter &GetPreparedLetter &GetWrappedLetter &addalert &getalert &delalert &findrelatedto &SendAlerts &GetPrintMessages &GetMessageTransportTypes
48
    );
48
    );
49
}
49
}
50
50
Lines 75-80 sub GetLetters { Link Here
75
    my ($filters) = @_;
75
    my ($filters) = @_;
76
    my $module    = $filters->{module};
76
    my $module    = $filters->{module};
77
    my $code      = $filters->{code};
77
    my $code      = $filters->{code};
78
    my $branchcode = $filters->{branchcode};
78
    my $dbh       = C4::Context->dbh;
79
    my $dbh       = C4::Context->dbh;
79
    my $letters   = $dbh->selectall_arrayref(
80
    my $letters   = $dbh->selectall_arrayref(
80
        q|
81
        q|
Lines 84-97 sub GetLetters { Link Here
84
        |
85
        |
85
          . ( $module ? q| AND module = ?| : q|| )
86
          . ( $module ? q| AND module = ?| : q|| )
86
          . ( $code   ? q| AND code = ?|   : q|| )
87
          . ( $code   ? q| AND code = ?|   : q|| )
88
          . ( defined $branchcode   ? q| AND branchcode = ?|   : q|| )
87
          . q| GROUP BY code ORDER BY name|, { Slice => {} }
89
          . q| GROUP BY code ORDER BY name|, { Slice => {} }
88
        , ( $module ? $module : () )
90
        , ( $module ? $module : () )
89
        , ( $code ? $code : () )
91
        , ( $code ? $code : () )
92
        , ( defined $branchcode ? $branchcode : () )
90
    );
93
    );
91
94
92
    return $letters;
95
    return $letters;
93
}
96
}
94
97
98
=head2 GetLetterTemplates
99
100
    my $letter_templates = GetLetterTemplates(
101
        {
102
            module => 'circulation',
103
            code => 'my code',
104
            branchcode => 'CPL', # '' for default,
105
        }
106
    );
107
108
    Return a hashref of letter templates.
109
    The key will be the message transport type.
110
111
=cut
112
113
sub GetLetterTemplates {
114
    my ( $params ) = @_;
115
116
    my $module    = $params->{module};
117
    my $code      = $params->{code};
118
    my $branchcode = $params->{branchcode};
119
    my $dbh       = C4::Context->dbh;
120
    my $letters   = $dbh->selectall_hashref(
121
        q|
122
            SELECT module, code, branchcode, name, is_html, title, content, message_transport_type
123
            FROM letter
124
            WHERE module = ?
125
            AND code = ?
126
            and branchcode = ?
127
        |
128
        , 'message_transport_type'
129
        , undef
130
        , $module, $code, $branchcode
131
    );
132
133
    return $letters;
134
}
135
136
=head2 GetLettersAvailableForALibrary
137
138
    my $letters = GetLettersAvailableForALibrary(
139
        {
140
            branchcode => 'CPL', # '' for default
141
            module => 'circulation',
142
        }
143
    );
144
145
    Return an arrayref of letters, sorted by name.
146
    If a specific letter exist for the given branchcode, it will be retrieve.
147
    Otherwise the default letter will be.
148
149
=cut
150
151
sub GetLettersAvailableForALibrary {
152
    my ($filters)  = @_;
153
    my $branchcode = $filters->{branchcode};
154
    my $module     = $filters->{module};
155
156
    croak "module should be provided" unless $module;
157
158
    my $dbh             = C4::Context->dbh;
159
    my $default_letters = $dbh->selectall_arrayref(
160
        q|
161
            SELECT module, code, branchcode, name
162
            FROM letter
163
            WHERE 1
164
        |
165
          . q| AND branchcode = ''|
166
          . ( $module ? q| AND module = ?| : q|| )
167
          . q| ORDER BY name|, { Slice => {} }
168
        , ( $module ? $module : () )
169
    );
170
171
    my $specific_letters;
172
    if ($branchcode) {
173
        $specific_letters = $dbh->selectall_arrayref(
174
            q|
175
                SELECT module, code, branchcode, name
176
                FROM letter
177
                WHERE 1
178
            |
179
              . q| AND branchcode = ?|
180
              . ( $module ? q| AND module = ?| : q|| )
181
              . q| ORDER BY name|, { Slice => {} }
182
            , $branchcode
183
            , ( $module ? $module : () )
184
        );
185
    }
186
187
    my %letters;
188
    for my $l (@$default_letters) {
189
        $letters{ $l->{code} } = $l;
190
    }
191
    for my $l (@$specific_letters) {
192
        # Overwrite the default letter with the specific one.
193
        $letters{ $l->{code} } = $l;
194
    }
195
196
    return [ map { $letters{$_} }
197
          sort { $letters{$a}->{name} cmp $letters{$b}->{name} }
198
          keys %letters ];
199
200
}
201
95
# FIXME: using our here means that a Plack server will need to be
202
# FIXME: using our here means that a Plack server will need to be
96
#        restarted fairly regularly when working with this routine.
203
#        restarted fairly regularly when working with this routine.
97
#        A better option would be to use Koha::Cache and use a cache
204
#        A better option would be to use Koha::Cache and use a cache
Lines 130-135 sub getletter { Link Here
130
    return { %$line };
237
    return { %$line };
131
}
238
}
132
239
240
=head2 DelLetter
241
242
    DelLetter(
243
        {
244
            branchcode => 'CPL',
245
            module => 'circulation',
246
            code => 'my code',
247
            [ mtt => 'email', ]
248
        }
249
    );
250
251
    Delete the letter. The mtt parameter is facultative.
252
    If not given, all templates mathing the other parameters will be removed.
253
254
=cut
255
256
sub DelLetter {
257
    my ($params)   = @_;
258
    my $branchcode = $params->{branchcode};
259
    my $module     = $params->{module};
260
    my $code       = $params->{code};
261
    my $mtt        = $params->{mtt};
262
    my $dbh        = C4::Context->dbh;
263
    $dbh->do(q|
264
        DELETE FROM letter
265
        WHERE branchcode = ?
266
          AND module = ?
267
          AND code = ?
268
    | . ( $mtt ? q| AND message_transport_type = ?| : q|| )
269
    , undef, $branchcode, $module, $code, ( $mtt ? $mtt : () ) );
270
}
271
133
=head2 addalert ($borrowernumber, $type, $externalid)
272
=head2 addalert ($borrowernumber, $type, $externalid)
134
273
135
    parameters : 
274
    parameters : 
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tt (-16 / +15 lines)
Lines 53-75 $(document).ready(function() { Link Here
53
53
54
        // Test if code already exists in DB
54
        // Test if code already exists in DB
55
        var new_lettercode = $("#code").val();
55
        var new_lettercode = $("#code").val();
56
        [% IF copy_form %]
56
        var new_branchcode = $("#branch").val();
57
          if ( new_lettercode == '[% code %]' ) {
58
            alert( _("Please change the code.") );
59
            return false;
60
          }
61
        [% END %]
62
63
        [% IF ( add_form and code ) # IF edit %]
57
        [% IF ( add_form and code ) # IF edit %]
64
          if ( new_lettercode != '[% code %]' ) {
58
          if ( new_lettercode != '[% code %]' ) {
65
        [% END %]
59
        [% END %]
66
          $.ajax({
60
          $.ajax({
67
            data: { code: new_lettercode },
61
            data: { code: new_lettercode, branchcode: new_branchcode },
68
            type: 'GET',
62
            type: 'GET',
69
            url: '/cgi-bin/koha/svc/letters/',
63
            url: '/cgi-bin/koha/svc/letters/',
70
            success: function (data) {
64
            success: function (data) {
71
              if ( data.letters.length > 0 ) {
65
              if ( data.letters.length > 0 ) {
72
                alert( _("This letter code is already used for another letter.") );
66
                if( new_branchcode == '' ) {
67
                    alert( _("A default letter with the code '%s' already exists.").format(new_lettercode) );
68
                } else {
69
                    alert( _("A letter with the code '%s' already exists for '%s'.").format(new_lettercode, new_branchcode) );
70
                }
73
                return false;
71
                return false;
74
              } else {
72
              } else {
75
                $("#add_notice").submit();
73
                $("#add_notice").submit();
Lines 333-345 $(document).ready(function() { Link Here
333
                </select>
331
                </select>
334
            </li>
332
            </li>
335
            <li>
333
            <li>
336
              <label for="code" class="required">Code:</label>
334
              [% IF adding %]
337
              <input type="text" id="code" name="code" size="20" maxlength="20" value="[% code %]" required="required"/>
335
                  <label for="code" class="required">Code:</label>
338
              <span class="required">Required</span>
336
                  <input type="text" id="code" name="code" size="20" maxlength="20" value="" required="required"/>
339
              [% IF copying %]
337
                  <span class="required">Required</span>
340
                You must change this code to reflect the copy.
338
              [% ELSE %]
339
                  <label for="code">Code:</label>
340
                  <input type="hidden" id="code" name="code" size="20" maxlength="20" value="[% code %]" required="required"/>
341
                  [% code %]
341
              [% END %]
342
              [% END %]
342
              <input type="hidden" name="oldcode" value="[% oldcode %]" />
343
            </li>
343
            </li>
344
            <li>
344
            <li>
345
              <label for="name" class="required">Name:</label>
345
              <label for="name" class="required">Name:</label>
Lines 448-454 $(document).ready(function() { Link Here
448
		<input type="hidden" name="branchcode" value="[% branchcode %]" />
448
		<input type="hidden" name="branchcode" value="[% branchcode %]" />
449
		<input type="hidden" name="code" value="[% code %]" />
449
		<input type="hidden" name="code" value="[% code %]" />
450
		<input type="hidden" name="module" value="[% module %]" />
450
		<input type="hidden" name="module" value="[% module %]" />
451
        <input type="hidden" name="message_transport_type" value="*" />
452
                <input type="submit" value="Yes, delete" class="approve" />
451
                <input type="submit" value="Yes, delete" class="approve" />
453
				</form>
452
				</form>
454
453
(-)a/svc/letters (-1 / +1 lines)
Lines 53-59 Used to get letters with a given letter code. Link Here
53
our ( $query, $response ) = C4::Service->init( tools => 'edit_notices' );
53
our ( $query, $response ) = C4::Service->init( tools => 'edit_notices' );
54
54
55
sub get_letters {
55
sub get_letters {
56
    my $letters = GetLetters({ code => $query->param('code') });
56
    my $letters = GetLetters({ code => $query->param('code'), branchcode => $query->param('branchcode') });
57
    $response->param( letters => $letters );
57
    $response->param( letters => $letters );
58
    C4::Service->return_success( $response );
58
    C4::Service->return_success( $response );
59
}
59
}
(-)a/t/db_dependent/Letters/GetLetterTemplates.t (+125 lines)
Line 0 Link Here
1
use Modern::Perl;
2
use Test::More tests => 6;
3
4
use C4::Context;
5
use C4::Letters qw( GetLetterTemplates );
6
7
my $dbh = C4::Context->dbh;
8
$dbh->{RaiseError} = 1;
9
$dbh->{AutoCommit} = 0;
10
11
$dbh->do(q|DELETE FROM letter|);
12
13
my $letters = [
14
    {
15
        module                 => 'circulation',
16
        code                   => 'code1',
17
        branchcode             => '',
18
        name                   => 'B default name for code1 circ',
19
        is_html                => 0,
20
        title                  => 'default title for code1 email',
21
        content                => 'default content for code1 email',
22
        message_transport_type => 'email',
23
    },
24
    {
25
        module                 => 'circulation',
26
        code                   => 'code1',
27
        branchcode             => '',
28
        name                   => 'B default name for code1 circ',
29
        is_html                => 0,
30
        title                  => 'default title for code1 sms',
31
        content                => 'default content for code1 sms',
32
        message_transport_type => 'sms',
33
    },
34
    {
35
        module                 => 'circulation',
36
        code                   => 'code2',
37
        branchcode             => '',
38
        name                   => 'A default name for code2 circ',
39
        is_html                => 0,
40
        title                  => 'default title for code2 email',
41
        content                => 'default content for code2 email',
42
        message_transport_type => 'email',
43
    },
44
    {
45
        module                 => 'circulation',
46
        code                   => 'code3',
47
        branchcode             => '',
48
        name                   => 'C default name for code3 circ',
49
        is_html                => 0,
50
        title                  => 'default title for code3 email',
51
        content                => 'default content for code3 email',
52
        message_transport_type => 'email',
53
    },
54
55
    {
56
        module                 => 'cataloguing',
57
        code                   => 'code1',
58
        branchcode             => '',
59
        name                   => 'default name for code1 cat',
60
        is_html                => 0,
61
        title                  => 'default title for code1 cat email',
62
        content                => 'default content for code1 cat email',
63
        message_transport_type => 'email',
64
    },
65
66
    {
67
        module                 => 'circulation',
68
        code                   => 'code1',
69
        branchcode             => 'CPL',
70
        name                   => 'B CPL name for code1 circ',
71
        is_html                => 0,
72
        title                  => 'CPL title for code1 email',
73
        content                => 'CPL content for code1 email',
74
        message_transport_type => 'email',
75
    },
76
    {
77
        module                 => 'circulation',
78
        code                   => 'code2',
79
        branchcode             => 'CPL',
80
        name                   => 'A CPL name for code1 circ',
81
        is_html                => 0,
82
        title                  => 'CPL title for code1 sms',
83
        content                => 'CPL content for code1 sms',
84
        message_transport_type => 'sms',
85
    },
86
    {
87
        module                 => 'circulation',
88
        code                   => 'code1',
89
        branchcode             => 'MPL',
90
        name                   => 'B MPL name for code1 circ',
91
        is_html                => 0,
92
        title                  => 'MPL title for code1 email',
93
        content                => 'MPL content for code1 email',
94
        message_transport_type => 'email',
95
    },
96
];
97
98
my $sth = $dbh->prepare(
99
q|INSERT INTO letter(module, code, branchcode, name, title, content, message_transport_type) VALUES (?, ?, ?, ?, ?, ?, ?)|
100
);
101
for my $l (@$letters) {
102
    $sth->execute( $l->{module}, $l->{code}, $l->{branchcode}, $l->{name},
103
        $l->{title}, $l->{content}, $l->{message_transport_type} );
104
}
105
106
my $letter_templates;
107
$letter_templates = C4::Letters::GetLetterTemplates;
108
is_deeply( $letter_templates, {},
109
    'GetLetterTemplates should not return templates if not param is given' );
110
111
$letter_templates = C4::Letters::GetLetterTemplates(
112
    { module => 'circulation', code => 'code1', branchcode => '' } );
113
is( scalar( keys %$letter_templates ),
114
    2, '2 default templates should exist for circulation code1' );
115
is( exists( $letter_templates->{email} ),
116
    1, 'The mtt email should exist for circulation code1' );
117
is( exists( $letter_templates->{sms} ),
118
    1, 'The mtt sms should exist for circulation code1' );
119
120
$letter_templates = C4::Letters::GetLetterTemplates(
121
    { module => 'circulation', code => 'code1', branchcode => 'CPL' } );
122
is( scalar( keys %$letter_templates ),
123
    1, '1 template should exist for circulation CPL code1' );
124
is( exists( $letter_templates->{email} ),
125
    1, 'The mtt should be email for circulation CPL code1' );
(-)a/t/db_dependent/Letters/GetLettersAvailableForALibrary.t (+195 lines)
Line 0 Link Here
1
use Modern::Perl;
2
use Test::More tests => 19;
3
4
use C4::Context;
5
use C4::Letters qw( GetLettersAvailableForALibrary DelLetter );
6
7
my $dbh = C4::Context->dbh;
8
$dbh->{RaiseError} = 1;
9
$dbh->{AutoCommit} = 0;
10
11
$dbh->do(q|DELETE FROM letter|);
12
13
my $letters = [
14
    {
15
        module                 => 'circulation',
16
        code                   => 'code1',
17
        branchcode             => '',
18
        name                   => 'B default name for code1 circ',
19
        is_html                => 0,
20
        title                  => 'default title for code1 email',
21
        content                => 'default content for code1 email',
22
        message_transport_type => 'email',
23
    },
24
    {
25
        module                 => 'circulation',
26
        code                   => 'code1',
27
        branchcode             => '',
28
        name                   => 'B default name for code1 circ',
29
        is_html                => 0,
30
        title                  => 'default title for code1 sms',
31
        content                => 'default content for code1 sms',
32
        message_transport_type => 'sms',
33
    },
34
    {
35
        module                 => 'circulation',
36
        code                   => 'code2',
37
        branchcode             => '',
38
        name                   => 'A default name for code2 circ',
39
        is_html                => 0,
40
        title                  => 'default title for code2 email',
41
        content                => 'default content for code2 email',
42
        message_transport_type => 'email',
43
    },
44
    {
45
        module                 => 'circulation',
46
        code                   => 'code3',
47
        branchcode             => '',
48
        name                   => 'C default name for code3 circ',
49
        is_html                => 0,
50
        title                  => 'default title for code3 email',
51
        content                => 'default content for code3 email',
52
        message_transport_type => 'email',
53
    },
54
55
    {
56
        module                 => 'cataloguing',
57
        code                   => 'code1',
58
        branchcode             => '',
59
        name                   => 'default name for code1 cat',
60
        is_html                => 0,
61
        title                  => 'default title for code1 cat email',
62
        content                => 'default content for code1 cat email',
63
        message_transport_type => 'email',
64
    },
65
66
    {
67
        module                 => 'circulation',
68
        code                   => 'code1',
69
        branchcode             => 'CPL',
70
        name                   => 'B CPL name for code1 circ',
71
        is_html                => 0,
72
        title                  => 'CPL title for code1 email',
73
        content                => 'CPL content for code1 email',
74
        message_transport_type => 'email',
75
    },
76
    {
77
        module                 => 'circulation',
78
        code                   => 'code2',
79
        branchcode             => 'CPL',
80
        name                   => 'A CPL name for code1 circ',
81
        is_html                => 0,
82
        title                  => 'CPL title for code1 sms',
83
        content                => 'CPL content for code1 sms',
84
        message_transport_type => 'sms',
85
    },
86
    {
87
        module                 => 'circulation',
88
        code                   => 'code1',
89
        branchcode             => 'MPL',
90
        name                   => 'B MPL name for code1 circ',
91
        is_html                => 0,
92
        title                  => 'MPL title for code1 email',
93
        content                => 'MPL content for code1 email',
94
        message_transport_type => 'email',
95
    },
96
];
97
98
my $sth = $dbh->prepare(
99
q|INSERT INTO letter(module, code, branchcode, name, title, content, message_transport_type) VALUES (?, ?, ?, ?, ?, ?, ?)|
100
);
101
for my $l (@$letters) {
102
    $sth->execute( $l->{module}, $l->{code}, $l->{branchcode}, $l->{name},
103
        $l->{title}, $l->{content}, $l->{message_transport_type} );
104
105
    # GetLettersAvailableForALibrary does not return these fields
106
    delete $l->{title};
107
    delete $l->{content};
108
    delete $l->{is_html};
109
    delete $l->{message_transport_type};
110
}
111
112
my $available_letters;
113
$available_letters =
114
  C4::Letters::GetLettersAvailableForALibrary( { module => 'circulation' } );
115
is( scalar(@$available_letters),
116
    3, 'There should be 3 default letters for circulation (3 distinct codes)' );
117
118
$available_letters = C4::Letters::GetLettersAvailableForALibrary(
119
    { module => 'circulation', branchcode => '' } );
120
is( scalar(@$available_letters), 3,
121
'There should be 3 default letters for circulation (3 distinct codes), branchcode=""'
122
);
123
is_deeply( $available_letters->[0],
124
    $letters->[2], 'The letters should be sorted by name (A)' );
125
is_deeply( $available_letters->[1],
126
    $letters->[0], 'The letters should be sorted by name (B)' );
127
is_deeply( $available_letters->[2],
128
    $letters->[3], 'The letters should be sorted by name (C)' );
129
130
$available_letters = C4::Letters::GetLettersAvailableForALibrary(
131
    { module => 'circulation', branchcode => 'CPL' } );
132
is( scalar(@$available_letters), 3,
133
'There should be 3 default letters for circulation (3 distinct codes), branchcode="CPL"'
134
);
135
is_deeply( $available_letters->[0],
136
    $letters->[6], 'The letters should be sorted by name (A)' );
137
is_deeply( $available_letters->[1],
138
    $letters->[5], 'The letters should be sorted by name (B)' );
139
is_deeply( $available_letters->[2],
140
    $letters->[3], 'The letters should be sorted by name (C)' );
141
142
$available_letters = C4::Letters::GetLettersAvailableForALibrary(
143
    { module => 'circulation', branchcode => 'MPL' } );
144
is( scalar(@$available_letters), 3,
145
'There should be 3 default letters for circulation (3 distinct codes), branchcode="CPL"'
146
);
147
is_deeply( $available_letters->[0],
148
    $letters->[2], 'The letters should be sorted by name (A)' );
149
is_deeply( $available_letters->[1],
150
    $letters->[7], 'The letters should be sorted by name (B)' );
151
is_deeply( $available_letters->[2],
152
    $letters->[3], 'The letters should be sorted by name (C)' );
153
154
my $letters_by_module = C4::Letters::GetLetters( { module => 'circulation' } );
155
is( scalar(@$letters_by_module),
156
    3, '3 different letter codes exist for circulation' );
157
158
my $letters_by_branchcode = C4::Letters::GetLetters( { branchcode => 'CPL' } );
159
is( scalar(@$letters_by_branchcode),
160
    2, '2 different letter codes exist for CPL' );
161
162
# On the way, we test DelLetter
163
is(
164
    C4::Letters::DelLetter(
165
        { module => 'cataloguing', code => 'code1', branchcode => 'MPL' }
166
    ),
167
    '0E0',
168
    'No letter exist for MPL cat/code1'
169
);
170
is(
171
    C4::Letters::DelLetter(
172
        { module => 'circulation', code => 'code1', branchcode => '' }
173
    ),
174
    2,
175
    '2 default letters existed for circ/code1 (1 for email and 1 for sms)'
176
);
177
is(
178
    C4::Letters::DelLetter(
179
        {
180
            module     => 'circulation',
181
            code       => 'code1',
182
            branchcode => 'CPL',
183
            mtt        => 'email'
184
        }
185
    ),
186
    1,
187
    '1 letter existed for CPL circ/code1/email'
188
);
189
is(
190
    C4::Letters::DelLetter(
191
        { module => 'circulation', code => 'code1', branchcode => 'MPL' }
192
    ),
193
    1,
194
    '1 letter existed for MPL circ/code1'
195
);
(-)a/tools/letter.pl (-38 / +19 lines)
Lines 50-83 use C4::Branch; # GetBranches Link Here
50
use C4::Letters;
50
use C4::Letters;
51
use C4::Members::Attributes;
51
use C4::Members::Attributes;
52
52
53
# _letter_from_where($branchcode,$module, $code, $mtt)
54
# - return FROM WHERE clause and bind args for a letter
55
sub _letter_from_where {
56
    my ($branchcode, $module, $code, $mtt) = @_;
57
    my $sql = q{FROM letter WHERE branchcode = ? AND module = ? AND code = ?};
58
    $sql .= q{ AND message_transport_type = ?} if $mtt ne '*';
59
    my @args = ( $branchcode || '', $module, $code, ($mtt ne '*' ? $mtt : ()) );
60
# Mysql is retarded. cause branchcode is part of the primary key it cannot be null. How does that
61
# work with foreign key constraint I wonder...
62
63
#   if ($branchcode) {
64
#       $sql .= " AND branchcode = ?";
65
#       push @args, $branchcode;
66
#   } else {
67
#       $sql .= " AND branchcode IS NULL";
68
#   }
69
70
    return ($sql, \@args);
71
}
72
73
# get_letters($branchcode,$module, $code, $mtt)
74
# - return letters with the given $branchcode, $module, $code and $mtt exists
75
sub get_letters {
76
    my ($sql, $args) = _letter_from_where(@_);
77
    my $dbh = C4::Context->dbh;
78
    my $letter = $dbh->selectall_hashref("SELECT * $sql", 'message_transport_type', undef, @$args);
79
    return $letter;
80
}
81
# $protected_letters = protected_letters()
53
# $protected_letters = protected_letters()
82
# - return a hashref of letter_codes representing letters that should never be deleted
54
# - return a hashref of letter_codes representing letters that should never be deleted
83
sub protected_letters {
55
sub protected_letters {
Lines 127-139 if ( $op eq 'add_validate' or $op eq 'copy_validate' ) { Link Here
127
if ($op eq 'copy_form') {
99
if ($op eq 'copy_form') {
128
    my $oldbranchcode = $input->param('oldbranchcode') || q||;
100
    my $oldbranchcode = $input->param('oldbranchcode') || q||;
129
    my $branchcode = $input->param('branchcode') || q||;
101
    my $branchcode = $input->param('branchcode') || q||;
130
    my $oldcode = $input->param('oldcode') || $input->param('code');
131
    add_form($oldbranchcode, $module, $code);
102
    add_form($oldbranchcode, $module, $code);
132
    $template->param(
103
    $template->param(
133
        oldbranchcode => $oldbranchcode,
104
        oldbranchcode => $oldbranchcode,
134
        branchcode => $branchcode,
105
        branchcode => $branchcode,
135
        branchloop => _branchloop($branchcode),
106
        branchloop => _branchloop($branchcode),
136
        oldcode => $oldcode,
137
        copying => 1,
107
        copying => 1,
138
        modify => 0,
108
        modify => 0,
139
    );
109
    );
Lines 145-152 elsif ( $op eq 'delete_confirm' ) { Link Here
145
    delete_confirm($branchcode, $module, $code);
115
    delete_confirm($branchcode, $module, $code);
146
}
116
}
147
elsif ( $op eq 'delete_confirmed' ) {
117
elsif ( $op eq 'delete_confirmed' ) {
148
    my $mtt = $input->param('message_transport_type');
118
    delete_confirmed($branchcode, $module, $code);
149
    delete_confirmed($branchcode, $module, $code, $mtt);
150
    $op = q{}; # next operation is to return to default screen
119
    $op = q{}; # next operation is to return to default screen
151
}
120
}
152
else {
121
else {
Lines 168-174 sub add_form { Link Here
168
    my $letters;
137
    my $letters;
169
    # if code has been passed we can identify letter and its an update action
138
    # if code has been passed we can identify letter and its an update action
170
    if ($code) {
139
    if ($code) {
171
        $letters = get_letters($branchcode,$module, $code, '*');
140
        $letters = C4::Letters::GetLetterTemplates(
141
            {
142
                branchcode => $branchcode,
143
                module     => $module,
144
                code       => $code,
145
            }
146
        );
172
    }
147
    }
173
148
174
    my $message_transport_types = GetMessageTransportTypes();
149
    my $message_transport_types = GetMessageTransportTypes();
Lines 278-285 sub add_validate { Link Here
278
        my $is_html = $input->param("is_html_$mtt");
253
        my $is_html = $input->param("is_html_$mtt");
279
        my $title   = shift @title;
254
        my $title   = shift @title;
280
        my $content = shift @content;
255
        my $content = shift @content;
281
        my $letter = get_letters($branchcode,$oldmodule, $code, $mtt);
256
        my $letter = C4::Letters::getletter( $oldmodule, $code, $branchcode, $mtt);
282
        unless ( $title and $content ) {
257
        unless ( $title and $content ) {
258
            # Delete this mtt if no title or content given
283
            delete_confirmed( $branchcode, $oldmodule, $code, $mtt );
259
            delete_confirmed( $branchcode, $oldmodule, $code, $mtt );
284
            next;
260
            next;
285
        }
261
        }
Lines 310-316 sub add_validate { Link Here
310
sub delete_confirm {
286
sub delete_confirm {
311
    my ($branchcode, $module, $code) = @_;
287
    my ($branchcode, $module, $code) = @_;
312
    my $dbh = C4::Context->dbh;
288
    my $dbh = C4::Context->dbh;
313
    my $letter = get_letters($branchcode, $module, $code, '*');
289
    my $letter = C4::Letters::getletter($module, $code, $branchcode);
314
    my @values = values %$letter;
290
    my @values = values %$letter;
315
    $template->param(
291
    $template->param(
316
        branchcode => $branchcode,
292
        branchcode => $branchcode,
Lines 324-332 sub delete_confirm { Link Here
324
300
325
sub delete_confirmed {
301
sub delete_confirmed {
326
    my ($branchcode, $module, $code, $mtt) = @_;
302
    my ($branchcode, $module, $code, $mtt) = @_;
327
    my ($sql, $args) = _letter_from_where($branchcode, $module, $code, $mtt);
303
    C4::Letters::DelLetter(
328
    my $dbh    = C4::Context->dbh;
304
        {
329
    $dbh->do("DELETE $sql", undef, @$args);
305
            branchcode => $branchcode,
306
            module     => $module,
307
            code       => $code,
308
            mtt        => $mtt
309
        }
310
    );
330
    # setup default display for screen
311
    # setup default display for screen
331
    default_display($branchcode);
312
    default_display($branchcode);
332
    return;
313
    return;
(-)a/tools/overduerules.pl (-2 / +6 lines)
Lines 201-207 if ($op eq 'save') { Link Here
201
}
201
}
202
my $branchloop = GetBranchesLoop($branch);
202
my $branchloop = GetBranchesLoop($branch);
203
203
204
my $letters = GetLetters({ module => "circulation" });
204
my $letters = C4::Letters::GetLettersAvailableForALibrary(
205
    {
206
        branchcode => $branch,
207
        module => "circulation",
208
    }
209
);
205
210
206
my @line_loop;
211
my @line_loop;
207
212
208
- 

Return to bug 13215