This commit is contained in:
j3d1 2024-06-18 14:15:29 +02:00
parent 4799a7cd5d
commit 69ce11c331
4 changed files with 50 additions and 26 deletions

View file

@ -1,6 +1,6 @@
from django.contrib import admin
from tickets.models import IssueThread, Comment, StateChange, Assignment, ItemRelation
from tickets.models import IssueThread, Comment, StateChange, Assignment, ItemRelation, ShippingCode
class IssueThreadAdmin(admin.ModelAdmin):
@ -23,8 +23,13 @@ class ItemRelationAdmin(admin.ModelAdmin):
pass
class ShippingCodesAdmin(admin.ModelAdmin):
pass
admin.site.register(IssueThread, IssueThreadAdmin)
admin.site.register(Comment, CommentAdmin)
admin.site.register(StateChange, StateChangeAdmin)
admin.site.register(Assignment, AssignmentAdmin)
admin.site.register(ItemRelation, ItemRelationAdmin)
admin.site.register(ShippingCode, ShippingCodesAdmin)

View file

@ -4,7 +4,7 @@ from django.test import TestCase, Client
from authentication.models import ExtendedUser
from mail.models import Email, EmailAttachment
from tickets.models import IssueThread, StateChange, Comment
from tickets.models import IssueThread, StateChange, Comment, ShippingCode
from django.contrib.auth.models import Permission
from knox.models import AuthToken
@ -24,8 +24,17 @@ class ShippingCodeApiTest(TestCase):
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json(), [])
def test_issues_list(self):
ShippingCode.objects.create(code='1234', type='2kg-eu')
response = self.client.get('/api/2/shipping_codes/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json()[0]['code'], '1234')
self.assertEqual(response.json()[0]['used_at'], None)
self.assertEqual(response.json()[0]['issue_thread'], None)
self.assertEqual(response.json()[0]['type'], '2kg-eu')
def test_issues_create(self):
response = self.client.post('/api/2/shipping_codes/', {'code': '1234'})
response = self.client.post('/api/2/shipping_codes/', {'code': '1234', 'type': '2kg-eu'})
self.assertEqual(response.status_code, 201)
self.assertEqual(response.json()['code'], '1234')
self.assertEqual(response.json()['used_at'], None)

View file

@ -434,12 +434,11 @@ const store = createStore({
commit('setMessageTemplates', data);
}
},
async updateMessageTemplate({commit, state}, template) {
async updateMessageTemplate({dispatch, state}, template) {
const {data, success} = await http.patch(`/2/message_templates/${template.id}/`,
{'message': template.message}, state.user.token);
const {data: newTemplates, success: newSuccess} = await http.get('/2/message_templates/', state.user.token);
if (data && success) {
commit('setMessageTemplates', data);
dispatch('fetchMessageTemplates');
}
},
async fetchMessageTemplateVariables({commit, state}) {
@ -448,11 +447,13 @@ const store = createStore({
commit('setMessageTemplateVariables', data);
}
},
async createMessageTemplate({commit, state}, template_name) {
const {data, success} = await http.post('/2/message_templates/', {name: template_name, message: '-'}, state.user.token);
const {data: newTemplates, success: newSuccess} = await http.get('/2/message_templates/', state.user.token);
async createMessageTemplate({dispatch, state}, template_name) {
const {data, success} = await http.post('/2/message_templates/', {
name: template_name,
message: '-'
}, state.user.token);
if (data && success) {
commit('setMessageTemplates', data);
dispatch('fetchMessageTemplates');
}
},
async fetchShippingCodes({commit, state}) {
@ -461,10 +462,10 @@ const store = createStore({
commit('setShippingCodes', data);
}
},
async createShippingCode({commit, state}, code) {
async createShippingCode({dispatch, state}, code) {
const {data, success} = await http.post('/2/shipping_codes/', code, state.user.token);
if (data && success) {
commit('setShippingCodes', data);
dispatch('fetchShippingCodes');
}
}
},

View file

@ -3,7 +3,9 @@
<h3>Shipping Codes</h3>
<ul>
<li v-for="code in shippingCodes" :key="code.code">
{{ code.type }} - {{ code.code }}
<span v-if="code.issue_thread == null">{{ code.type }} - {{ code.code }}</span>
<span v-else><s>{{ code.type }} - {{ code.code }}</s> <a
:href="'/'+ getEventSlug + '/ticket/' + code.issue_thread">Issue</a></span>
</li>
</ul>
<!--Table
@ -25,15 +27,16 @@
</template>
</Table-->
<div class="mt-3">
<textarea class="form-control mb-3" rows="5" placeholder="Shipping Code List" v-model="bulk_codes" v-if="bulk"></textarea>
<textarea class="form-control mb-3" rows="5" placeholder="Shipping Code List" v-model="bulk_codes"
v-if="bulk"></textarea>
<div class="input-group">
<input type="text" class="form-control" placeholder="Shipping Code" v-model="code" v-if="!bulk">
<select class="form-control" v-model="type">
<option value="2kg-eu">2kg DE</option>
<option value="2kg-uk">2kg EU</option>
<option value="2kg-us">5kg DE</option>
<option value="2kg-us">5kg EU</option>
<option value="2kg-us">10kg DE</option>
<option value="2kg-de">2kg DE</option>
<option value="2kg-eu">2kg EU</option>
<option value="5kg-de">5kg DE</option>
<option value="5kg-eu">5kg EU</option>
<option value="10kg-de">10kg DE</option>
</select>
<div class="input-group-prepend">
<div class="input-group-text">
@ -51,7 +54,7 @@
</template>
<script>
import {mapActions, mapState} from 'vuex';
import {mapActions, mapGetters, mapState} from 'vuex';
import Table from '@/components/Table';
export default {
@ -65,18 +68,24 @@ export default {
bulk: false,
};
},
computed: mapState(['shippingCodes']),
computed: {
...mapState(['shippingCodes']),
...mapGetters(['getEventSlug']),
},
methods: {
...mapActions(['fetchShippingCodes', 'createShippingCode']),
createSingleOrBulkShippingCode() {
if (this.bulk) {
this.bulk_codes.split('\n').forEach(code => {
this.createShippingCode({code: code.trim(), type: this.type});
const jobs = this.bulk_codes.split('\n').map(code => {
return this.createShippingCode({code: code.trim(), type: this.type});
});
Promise.all(jobs).then(() => {
this.bulk_codes = '';
});
this.bulk_codes = '';
} else {
this.createShippingCode({code: this.code, type: this.type});
this.code = '';
this.createShippingCode({code: this.code, type: this.type}).then(() => {
this.code = '';
});
}
},
},