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

(-)a/Koha/AdditionalField.pm (-10 / +11 lines)
Lines 55-70 sub to_api { Link Here
55
    my ( $self, $params ) = @_;
55
    my ( $self, $params ) = @_;
56
56
57
    my $table_to_resource = {
57
    my $table_to_resource = {
58
        'accountlines:credit'  => 'credit',
58
        'accountlines:credit'   => 'credit',
59
        'accountlines:debit'   => 'debit',
59
        'accountlines:debit'    => 'debit',
60
        'aqbasket'             => 'basket',
60
        'aqbasket'              => 'basket',
61
        'aqinvoices'           => 'invoice',
61
        'aqinvoices'            => 'invoice',
62
        'erm_licenses'         => 'license',
62
        'erm_licenses'          => 'license',
63
        'erm_agreements'       => 'agreement',
63
        'erm_agreements'        => 'agreement',
64
        'erm_packages'         => 'package',
64
        'erm_packages'          => 'package',
65
        'aqorders'             => 'order',
65
        'aqorders'              => 'order',
66
        'aqbooksellers:vendor' => 'vendor',
66
        'aqbooksellers:vendor'  => 'vendor',
67
        'erm_titles'           => 'title'
67
        'erm_titles'            => 'title',
68
        'erm_agreement_periods' => 'agreement_period'
68
    };
69
    };
69
70
70
    my $json = $self->SUPER::to_api($params);
71
    my $json = $self->SUPER::to_api($params);
(-)a/Koha/ERM/Agreement.pm (-1 / +8 lines)
Lines 27-32 use Koha::Acquisition::Bookseller; Link Here
27
27
28
use base qw(Koha::Object::Mixin::AdditionalFields Koha::Object);
28
use base qw(Koha::Object::Mixin::AdditionalFields Koha::Object);
29
29
30
use Koha::ERM::Agreement::Period;
30
use Koha::ERM::Agreement::Periods;
31
use Koha::ERM::Agreement::Periods;
31
use Koha::ERM::Agreement::Licenses;
32
use Koha::ERM::Agreement::Licenses;
32
use Koha::ERM::Agreement::Relationships;
33
use Koha::ERM::Agreement::Relationships;
Lines 60-66 sub periods { Link Here
60
                $self->periods->delete;
61
                $self->periods->delete;
61
62
62
                for my $period (@$periods) {
63
                for my $period (@$periods) {
63
                    $self->_result->add_to_erm_agreement_periods($period);
64
                    my $extended_attributes = delete $period->{extended_attributes} // [];
65
                    my @extended_attributes =
66
                        map { { 'id' => $_->{field_id}, 'value' => $_->{value} } } @{$extended_attributes};
67
                    $period->{agreement_id} = $self->agreement_id;
68
69
                    my $stored_period = Koha::ERM::Agreement::Period->new($period)->store;
70
                    $stored_period->extended_attributes( \@extended_attributes );
64
                }
71
                }
65
            }
72
            }
66
        );
73
        );
(-)a/Koha/ERM/Agreement/Period.pm (-1 / +1 lines)
Lines 19-25 use Modern::Perl; Link Here
19
19
20
use Koha::Database;
20
use Koha::Database;
21
21
22
use base qw(Koha::Object);
22
use base qw(Koha::Object::Mixin::AdditionalFields Koha::Object);
23
23
24
=head1 NAME
24
=head1 NAME
25
25
(-)a/Koha/ERM/Agreement/Periods.pm (-1 / +1 lines)
Lines 21-27 use Koha::Database; Link Here
21
21
22
use Koha::ERM::Agreement::Period;
22
use Koha::ERM::Agreement::Period;
23
23
24
use base qw(Koha::Objects);
24
use base qw(Koha::Objects::Mixin::AdditionalFields Koha::Objects);
25
25
26
=head1 NAME
26
=head1 NAME
27
27
(-)a/Koha/REST/V1/ExtendedAttributeTypes.pm (-10 / +11 lines)
Lines 44-59 sub _list { Link Here
44
44
45
    # FIXME: Maybe not the best place for this mapping
45
    # FIXME: Maybe not the best place for this mapping
46
    my $resource_to_table = {
46
    my $resource_to_table = {
47
        basket    => 'aqbasket',
47
        basket           => 'aqbasket',
48
        credit    => 'accountlines:credit',
48
        credit           => 'accountlines:credit',
49
        debit     => 'accountlines:debit',
49
        debit            => 'accountlines:debit',
50
        invoice   => 'aqinvoices',
50
        invoice          => 'aqinvoices',
51
        license   => 'erm_licenses',
51
        license          => 'erm_licenses',
52
        agreement => 'erm_agreements',
52
        agreement        => 'erm_agreements',
53
        package   => 'erm_packages',
53
        package          => 'erm_packages',
54
        order     => 'aqorders',
54
        order            => 'aqorders',
55
        vendor    => 'aqbooksellers:vendor',
55
        vendor           => 'aqbooksellers:vendor',
56
        title     => 'erm_titles'
56
        title            => 'erm_titles',
57
        agreement_period => 'erm_agreement_periods'
57
    };
58
    };
58
59
59
    my @tables;
60
    my @tables;
(-)a/api/v1/swagger/definitions/erm_agreement_period.yaml (+10 lines)
Lines 28-33 properties: Link Here
28
    type:
28
    type:
29
      - string
29
      - string
30
      - "null"
30
      - "null"
31
  extended_attributes:
32
    description: Related additional field values
33
    type:
34
      - array
35
    items:
36
      $ref: extended_attribute_value.yaml
37
  _strings:
38
    type:
39
      - object
40
      - "null"
31
additionalProperties: false
41
additionalProperties: false
32
required:
42
required:
33
  - started_on
43
  - started_on
(-)a/api/v1/swagger/paths/erm_agreements.yaml (+2 lines)
Lines 189-194 Link Here
189
          type: string
189
          type: string
190
          enum:
190
          enum:
191
            - periods
191
            - periods
192
            - periods.extended_attributes
193
            - periods+strings
192
            - user_roles
194
            - user_roles
193
            - user_roles.patron
195
            - user_roles.patron
194
            - agreement_licenses
196
            - agreement_licenses
(-)a/api/v1/swagger/paths/extended_attribute_types.yaml (+1 lines)
Lines 25-30 Link Here
25
          - subscription
25
          - subscription
26
          - vendor
26
          - vendor
27
          - title
27
          - title
28
          - agreement_period
28
      - $ref: "../swagger.yaml#/parameters/match"
29
      - $ref: "../swagger.yaml#/parameters/match"
29
      - $ref: "../swagger.yaml#/parameters/order_by"
30
      - $ref: "../swagger.yaml#/parameters/order_by"
30
      - $ref: "../swagger.yaml#/parameters/page"
31
      - $ref: "../swagger.yaml#/parameters/page"
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/additional-fields.tt (+1 lines)
Lines 147-152 Link Here
147
                        [% WRAPPER table_option value="erm_licenses" %]Licenses[% END %]
147
                        [% WRAPPER table_option value="erm_licenses" %]Licenses[% END %]
148
                        [% WRAPPER table_option value="erm_packages" %]Packages[% END %]
148
                        [% WRAPPER table_option value="erm_packages" %]Packages[% END %]
149
                        [% WRAPPER table_option value="erm_titles" %]Titles[% END %]
149
                        [% WRAPPER table_option value="erm_titles" %]Titles[% END %]
150
                        [% WRAPPER table_option value="erm_agreement_periods" %]Agreement periods[% END %]
150
                    </ul>
151
                    </ul>
151
                [% END %]
152
                [% END %]
152
                [% IF CAN_user_updatecharges_remaining_permissions || CAN_user_parameters_manage_accounts %]
153
                [% IF CAN_user_updatecharges_remaining_permissions || CAN_user_parameters_manage_accounts %]
(-)a/koha-tmpl/intranet-tmpl/prog/js/fetch/erm-api-client.js (-1 / +1 lines)
Lines 21-27 export class ERMAPIClient { Link Here
21
                    endpoint: "agreements/" + id,
21
                    endpoint: "agreements/" + id,
22
                    headers: {
22
                    headers: {
23
                        "x-koha-embed":
23
                        "x-koha-embed":
24
                            "periods,user_roles,user_roles.patron,agreement_licenses,agreement_licenses.license,agreement_relationships,agreement_relationships.related_agreement,documents,agreement_packages,agreement_packages.package,vendor,extended_attributes,+strings",
24
                            "periods,periods.extended_attributes,periods+strings,user_roles,user_roles.patron,agreement_licenses,agreement_licenses.license,agreement_relationships,agreement_relationships.related_agreement,documents,agreement_packages,agreement_packages.package,vendor,extended_attributes,+strings",
25
                    },
25
                    },
26
                }),
26
                }),
27
            getAll: (query, params) =>
27
            getAll: (query, params) =>
(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue (-2 / +14 lines)
Lines 169-174 export default { Link Here
169
                        type: "table",
169
                        type: "table",
170
                        columnData: "periods",
170
                        columnData: "periods",
171
                        hidden: agreement => !!agreement.periods?.length,
171
                        hidden: agreement => !!agreement.periods?.length,
172
                        includeAdditionalFields: true,
172
                        columns: [
173
                        columns: [
173
                            {
174
                            {
174
                                name: $__("Period start"),
175
                                name: $__("Period start"),
Lines 208-213 export default { Link Here
208
                                ended_on: null,
209
                                ended_on: null,
209
                                cancellation_deadline: null,
210
                                cancellation_deadline: null,
210
                                notes: null,
211
                                notes: null,
212
                                extended_attributes: [],
211
                            },
213
                            },
212
                        },
214
                        },
213
                    },
215
                    },
Lines 251-256 export default { Link Here
251
                            label: $__("Notes"),
253
                            label: $__("Notes"),
252
                            indexRequired: true,
254
                            indexRequired: true,
253
                        },
255
                        },
256
                        {
257
                            name: "additional_fields",
258
                            type: "additional_fields",
259
                            extended_attributes_resource_type:
260
                                "agreement_period",
261
                        },
254
                    ],
262
                    ],
255
                    hideIn: ["List"],
263
                    hideIn: ["List"],
256
                },
264
                },
Lines 781-788 export default { Link Here
781
            }
789
            }
782
790
783
            agreement.periods = agreement.periods.map(
791
            agreement.periods = agreement.periods.map(
784
                ({ agreement_id, agreement_period_id, ...keepAttrs }) =>
792
                ({
785
                    keepAttrs
793
                    agreement_id,
794
                    agreement_period_id,
795
                    _strings,
796
                    ...keepAttrs
797
                }) => keepAttrs
786
            );
798
            );
787
799
788
            agreement.user_roles = agreement.user_roles.map(
800
            agreement.user_roles = agreement.user_roles.map(
(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ShowElement.vue (-3 / +27 lines)
Lines 55-61 Link Here
55
            <table>
55
            <table>
56
                <thead>
56
                <thead>
57
                    <th
57
                    <th
58
                        v-for="column in attribute.columns"
58
                        v-for="column in tableColumns"
59
                        :key="column.name + 'head'"
59
                        :key="column.name + 'head'"
60
                    >
60
                    >
61
                        {{ column.name }}
61
                        {{ column.name }}
Lines 67-73 Link Here
67
                        v-bind:key="counter"
67
                        v-bind:key="counter"
68
                    >
68
                    >
69
                        <td
69
                        <td
70
                            v-for="dataColumn in attribute.columns"
70
                            v-for="dataColumn in tableColumns"
71
                            :key="dataColumn.name + 'data'"
71
                            :key="dataColumn.name + 'data'"
72
                        >
72
                        >
73
                            <template
73
                            <template
Lines 196-201 export default { Link Here
196
            );
196
            );
197
            return option.description;
197
            return option.description;
198
        });
198
        });
199
        const tableColumns = computed(() => {
200
            const tableData = props.resource[attribute.value.columnData];
201
            const columns = attribute.value.columns;
202
            if (attribute.value.includeAdditionalFields && tableData?.length) {
203
                const additionalFieldColumns = tableData.reduce((acc, curr) => {
204
                    if (curr._strings?.additional_field_values.length) {
205
                        curr._strings.additional_field_values.forEach(av => {
206
                            if (!acc.includes(av.field_label)) {
207
                                acc.push(av.field_label);
208
                            }
209
                            curr[av.field_label] = av.value_str;
210
                        });
211
                    }
212
                    return acc;
213
                }, []);
214
                additionalFieldColumns.forEach(col => {
215
                    columns.push({
216
                        name: col,
217
                        value: col,
218
                    });
219
                });
220
            }
221
            return columns;
222
        });
199
223
200
        return {
224
        return {
201
            ...baseElement,
225
            ...baseElement,
Lines 203-208 export default { Link Here
203
            attribute,
227
            attribute,
204
            formatValue,
228
            formatValue,
205
            radioOptionText,
229
            radioOptionText,
230
            tableColumns,
206
        };
231
        };
207
    },
232
    },
208
    props: {
233
    props: {
209
- 

Return to bug 39438