]> git.koha-community.org Git - koha.git/blob - koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsShow.vue
Bug 32030: ERM - Add 'edit' and 'delete' shortcuts on the 'show' view
[koha.git] / koha-tmpl / intranet-tmpl / prog / js / vue / components / ERM / AgreementsShow.vue
1 <template>
2     <div v-if="!this.initialized">Loading...</div>
3     <div v-else id="agreements_show">
4         <h2>
5             Agreement #{{ agreement.agreement_id }}
6             <span class="action_links">
7                 <router-link
8                     :to="`/cgi-bin/koha/erm/agreements/edit/${agreement.agreement_id}`"
9                     title="Edit"
10                     ><i class="fa fa-pencil"></i
11                 ></router-link>
12
13                 <router-link
14                     :to="`/cgi-bin/koha/erm/agreements/delete/${agreement.agreement_id}`"
15                     title="Delete"
16                     ><i class="fa fa-trash"></i
17                 ></router-link>
18             </span>
19         </h2>
20         <div>
21             <fieldset class="rows">
22                 <ol>
23                     <li>
24                         <label>Agreement name:</label>
25                         <span>
26                             {{ agreement.name }}
27                         </span>
28                     </li>
29                     <li>
30                         <label>Vendor:</label>
31                         <span v-if="agreement.vendor_id">
32                             {{
33                                 vendors.find((e) => e.id == agreement.vendor_id)
34                                     .name
35                             }}
36                         </span>
37                     </li>
38                     <li>
39                         <label>Description: </label>
40                         <span>
41                             {{ agreement.description }}
42                         </span>
43                     </li>
44                     <li>
45                         <label>Status: </label>
46                         <span>{{
47                             get_lib_from_av(
48                                 av_agreement_statuses,
49                                 agreement.status
50                             )
51                         }}</span>
52                     </li>
53                     <li>
54                         <label>Closure reason:</label>
55                         <span>{{
56                             get_lib_from_av(
57                                 av_agreement_closure_reasons,
58                                 agreement.closure_reason
59                             )
60                         }}</span>
61                     </li>
62                     <li>
63                         <label>Is perpetual:</label>
64                         <span v-if="agreement.is_perpetual">Yes</span>
65                         <span v-else>No</span>
66                     </li>
67                     <li>
68                         <label>Renewal priority:</label>
69                         <span>{{
70                             get_lib_from_av(
71                                 av_agreement_renewal_priorities,
72                                 agreement.renewal_priority
73                             )
74                         }}</span>
75                     </li>
76                     <li>
77                         <label>License info: </label>
78                         <span>{{ agreement.license_info }}</span>
79                     </li>
80
81                     <li>
82                         <label>Periods</label>
83                         <table>
84                             <thead>
85                                 <th>Period start</th>
86                                 <th>Period end</th>
87                                 <th>Cancellation deadline</th>
88                                 <th>Period note</th>
89                             </thead>
90                             <tbody>
91                                 <tr
92                                     v-for="(
93                                         period, counter
94                                     ) in agreement.periods"
95                                     v-bind:key="counter"
96                                 >
97                                     <td>
98                                         {{ format_date(period.started_on) }}
99                                     </td>
100                                     <td>{{ format_date(period.ended_on) }}</td>
101                                     <td>
102                                         {{
103                                             format_date(
104                                                 period.cancellation_deadline
105                                             )
106                                         }}
107                                     </td>
108                                     <td>{{ period.notes }}</td>
109                                 </tr>
110                             </tbody>
111                         </table>
112                     </li>
113
114                     <li>
115                         <label>Users</label>
116                         <table>
117                             <thead>
118                                 <th>Name</th>
119                                 <th>Role</th>
120                             </thead>
121                             <tbody>
122                                 <tr
123                                     v-for="(
124                                         role, counter
125                                     ) in agreement.user_roles"
126                                     v-bind:key="counter"
127                                 >
128                                     <td>{{ patron_to_html(role.patron) }}</td>
129                                     <td>
130                                         {{
131                                             get_lib_from_av(
132                                                 av_agreement_user_roles,
133                                                 role.role
134                                             )
135                                         }}
136                                     </td>
137                                 </tr>
138                             </tbody>
139                         </table>
140                     </li>
141
142                     <li>
143                         <label>Licenses</label>
144                         <table>
145                             <thead>
146                                 <th>Name</th>
147                                 <th>Status</th>
148                                 <th>Physical location</th>
149                                 <th>Notes</th>
150                                 <th>URI</th>
151                             </thead>
152                             <tbody>
153                                 <tr
154                                     v-for="(
155                                         agreement_license, counter
156                                     ) in agreement.agreement_licenses"
157                                     v-bind:key="counter"
158                                 >
159                                     <td>
160                                         <router-link
161                                             :to="`/cgi-bin/koha/erm/licenses/${agreement_license.license_id}`"
162                                         >
163                                             {{ agreement_license.license.name }}
164                                         </router-link>
165                                     </td>
166                                     <td>
167                                         {{
168                                             get_lib_from_av(
169                                                 av_agreement_license_statuses,
170                                                 agreement_license.status
171                                             )
172                                         }}
173                                     </td>
174                                     <td>
175                                         {{
176                                             get_lib_from_av(
177                                                 av_agreement_license_location,
178                                                 agreement_license.physical_location
179                                             )
180                                         }}
181                                     </td>
182                                     <td>{{ agreement_license.notes }}</td>
183                                     <td>{{ agreement_license.uri }}</td>
184                                 </tr>
185                             </tbody>
186                         </table>
187                     </li>
188
189                     <li>
190                         <label>Related agreements</label>
191                         <div
192                             v-for="relationship in agreement.agreement_relationships"
193                             v-bind:key="relationship.related_agreement_id"
194                         >
195                             <span
196                                 ><router-link
197                                     :to="`/cgi-bin/koha/erm/agreements/${relationship.related_agreement.agreement_id}`"
198                                     >{{
199                                         relationship.related_agreement.name
200                                     }}</router-link
201                                 ></span
202                             >
203                             {{
204                                 get_lib_from_av(
205                                     av_agreement_relationships,
206                                     relationship.relationship
207                                 )
208                             }}
209                             {{ agreement.name }}
210                         </div>
211                     </li>
212                 </ol>
213             </fieldset>
214             <fieldset class="action">
215                 <router-link
216                     to="/cgi-bin/koha/erm/agreements"
217                     role="button"
218                     class="cancel"
219                     >Close</router-link
220                 >
221             </fieldset>
222         </div>
223     </div>
224 </template>
225
226 <script>
227 import AgreementPeriods from './AgreementPeriods.vue'
228 import AgreementUserRoles from './AgreementUserRoles.vue'
229 import { useVendorStore } from "../../stores/vendors"
230 import { useAVStore } from "../../stores/authorised_values"
231 import { fetchAgreement } from "../../fetch"
232 import { storeToRefs } from "pinia"
233
234 export default {
235     setup() {
236         const format_date = $date
237         const patron_to_html = $patron_to_html
238         const get_lib_from_av = function (arr, av) {
239             let o = arr.find(
240                 (e) => e.authorised_value == av
241             )
242             return o ? o.lib : ""
243         }
244         const vendorStore = useVendorStore()
245         const { vendors } = storeToRefs(vendorStore)
246
247         const AVStore = useAVStore()
248         const {
249             av_agreement_statuses,
250             av_agreement_closure_reasons,
251             av_agreement_renewal_priorities,
252             av_agreement_user_roles,
253             av_agreement_license_statuses,
254             av_agreement_license_location,
255             av_agreement_relationships,
256         } = storeToRefs(AVStore)
257
258         return {
259             format_date,
260             patron_to_html,
261             get_lib_from_av,
262             vendors,
263             av_agreement_statuses,
264             av_agreement_closure_reasons,
265             av_agreement_renewal_priorities,
266             av_agreement_user_roles,
267             av_agreement_license_statuses,
268             av_agreement_license_location,
269             av_agreement_relationships,
270         }
271     },
272     data() {
273         return {
274             agreement: {
275                 agreement_id: null,
276                 name: '',
277                 vendor_id: null,
278                 vendor: null,
279                 description: '',
280                 status: '',
281                 closure_reason: '',
282                 is_perpetual: false,
283                 renewal_priority: '',
284                 license_info: '',
285                 periods: [],
286                 user_roles: [],
287             },
288             initialized: false,
289         }
290     },
291     beforeRouteEnter(to, from, next) {
292         next(vm => {
293             vm.getAgreement(to.params.agreement_id)
294         })
295     },
296     beforeRouteUpdate(to, from) {
297         this.agreement = this.getAgreement(to.params.agreement_id)
298     },
299     methods: {
300         async getAgreement(agreement_id) {
301             const agreement = await fetchAgreement(agreement_id)
302             this.agreement = agreement
303             this.initialized = true
304         },
305     },
306     components: {
307         AgreementPeriods,
308         AgreementUserRoles
309     },
310     name: "AgreementsShow",
311 }
312 </script>
313 <style scoped>
314 .action_links a {
315     padding-left: .2em;
316     font-size: 11px;
317 }
318 </style>