use base qw(Koha::Object);
+use Koha::ERM::Package::Agreements;
+
=head1 NAME
Koha::ERM::Package - Koha ERM Package Object class
=head2 Class Methods
+=head3 package_agreements
+
+Returns the package agreements link for this package
+
=cut
+sub package_agreements {
+ my ( $self, $package_agreements ) = @_;
+
+ if ( $package_agreements ) {
+ my $schema = $self->_result->result_source->schema;
+ $schema->txn_do(
+ sub {
+ $self->package_agreements->delete;
+
+ for my $package_agreement (@$package_agreements) {
+ $self->_result->add_to_erm_packages_agreements($package_agreement);
+ }
+ }
+ );
+ }
+
+ my $agreements_rs = $self->_result->erm_packages_agreements;
+ return Koha::ERM::Package::Agreements->_new_from_dbic($agreements_rs);
+}
+
=head2 Internal methods
=head3 _type
--- /dev/null
+package Koha::ERM::Package::Agreement;
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use Koha::Database;
+
+use Koha::ERM::Agreement;
+
+use base qw(Koha::Object);
+
+=head1 NAME
+
+Koha::ERM::Package::Agreement - Koha Package Agreement Object class
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 agreement
+
+Return the agreement linked to this package agreement
+
+=cut
+
+sub agreement {
+ my ( $self ) = @_;
+ my $agreement_rs = $self->_result->agreement;
+ return Koha::ERM::Agreement->_new_from_dbic($agreement_rs);
+}
+
+=head2 Internal methods
+
+=head3 _type
+
+=cut
+
+sub _type {
+ return 'ErmPackagesAgreement';
+}
+
+1;
--- /dev/null
+package Koha::ERM::Package::Agreements;
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+
+use Koha::Database;
+
+use Koha::ERM::Package::Agreement;
+
+use base qw(Koha::Objects);
+
+=head1 NAME
+
+Koha::ERM::Package::Agreements - Koha Package Agreement Object set class
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ErmPackageAgreement';
+}
+
+sub object_class {
+ return 'Koha::ERM::Package::Agreement';
+}
+
+1;
my $body = $c->validation->param('body');
+ my $package_agreements = delete $body->{package_agreements} // [];
+
my $package = Koha::ERM::Package->new_from_api($body)->store;
+ $package->package_agreements($package_agreements);
$c->res->headers->location($c->req->url->to_string . '/' . $package->package_id);
return $c->render(
my $body = $c->validation->param('body');
+ my $package_agreements = delete $body->{package_agreements} // [];
+
$package->set_from_api($body)->store;
+ $package->package_agreements($package_agreements);
$c->res->headers->location($c->req->url->to_string . '/' . $package->package_id);
return $c->render(
type:
- string
- "null"
+ package_agreements:
+ type: array
+ description: agreements
+ items:
+ $ref: erm_package_agreement.yaml
additionalProperties: false
required:
--- /dev/null
+---
+type: object
+properties:
+ package_id:
+ type: integer
+ description: foreign key to package
+ readOnly: true
+ agreement_id:
+ description: foreign key to agreement
+ type: integer
+
+additionalProperties: false
+required:
+ - agreement_id
x-koha-authorization:
permissions:
erm: 1
+ x-koha-embed:
+ - agreements
put:
x-mojo-to: ERM::Packages#update
operationId: updateErmPackages
required: true
schema:
$ref: "../swagger.yaml#/definitions/erm_package"
-
responses:
200:
description: A successfully updated package
x-koha-authorization:
permissions:
erm: 1
+ x-koha-embed:
+ - agreements
delete:
x-mojo-to: ERM::Packages#delete
operationId: deleteErmPackages
--- /dev/null
+<template>
+ <fieldset class="rows" id="package_agreements">
+ <legend>{{ $t("Agreements") }}</legend>
+ <fieldset
+ class="rows"
+ v-for="(package_agreement, counter) in package_agreements"
+ v-bind:key="counter"
+ >
+ <legend>
+ {{ $t("Agreement.counter", { counter: counter + 1 }) }}
+ <a href="#" @click.prevent="deleteAgreement(counter)"
+ ><i class="fa fa-trash"></i>
+ {{ $t("Remove this agreement") }}</a
+ >
+ </legend>
+ <ol>
+ <li>
+ <label :for="`agreement_id_${counter}`"
+ >{{ $t("Agreement:") }}
+ </label>
+ <select
+ v-model="package_agreement.agreement_id"
+ :id="`agreement_id_${counter}`"
+ required
+ >
+ <option value=""></option>
+ <option
+ v-for="agreement in agreements"
+ :key="agreement.agreement_id"
+ :value="agreement.agreement_id"
+ :selected="
+ agreement.agreement_id ==
+ package_agreement.agreement_id
+ ? true
+ : false
+ "
+ >
+ {{ agreement.name }}
+ </option>
+ </select>
+ <span class="required">{{ $t("Required") }}</span>
+ </li>
+ </ol>
+ </fieldset>
+ <a
+ v-if="agreements.length"
+ class="btn btn-default"
+ @click="addAgreement"
+ ><font-awesome-icon icon="plus" />
+ {{ $t("Add new agreement") }}</a
+ >
+ <span v-else>{{
+ $t("There are no agreements created yet")
+ }}</span>
+ </fieldset>
+</template>
+
+<script>
+import { fetchAgreements } from "../../fetch"
+
+export default {
+ data() {
+ return {
+ agreements: [],
+ }
+ },
+ beforeCreate() {
+ fetchAgreements().then((agreements) => {
+ this.agreements = agreements
+ })
+ },
+ methods: {
+ addAgreement() {
+ this.package_agreements.push({
+ agreement_id: null,
+ })
+ },
+ deleteAgreement(counter) {
+ this.package_agreements.splice(counter, 1)
+ },
+ },
+ props: {
+ package_agreements: Array,
+ },
+ name: 'PackageAgreements',
+}
+</script>
\ No newline at end of file
</li>
<PackageAgreements
- :package_agreements="erm_package.agreements"
+ :package_agreements="erm_package.package_agreements"
/>
</ol>
</fieldset>
external_package_id: null,
package_type: '',
content_type: '',
+ package_agreements: [],
},
initialized: false,
}
}
delete erm_package.package_id
+ erm_package.package_agreements = erm_package.package_agreements.map(({ package_id, agreement, ...keepAttrs }) => keepAttrs)
+
const options = {
method: method,
body: JSON.stringify(erm_package),
}).catch(e => { console.log(e) })
},
},
- components: [
+ components: {
PackageAgreements,
- ],
+ },
name: "PackagesFormAdd",
}
</script>
\ No newline at end of file
if (!package_id) return;
const apiUrl = "/api/v1/erm/packages/" + package_id;
let erm_package;
- await fetch(apiUrl)
+ await fetch(apiUrl, {
+ headers: {
+ "x-koha-embed": "package_agreements,package_agreements.agreement",
+ },
+ })
.then((res) => res.json())
.then(
(result) => {