added action permission checks

This commit is contained in:
Aurthur Musendame 2021-09-03 11:42:42 +02:00
parent ae3c7ec849
commit ba5127b42d
3 changed files with 134 additions and 18 deletions

View file

@ -127,7 +127,6 @@ class WorkSheet(WSBase):
def has_processed_samples(self):
states = [
analysis_conf.states.result.RESULTED,
analysis_conf.states.result.TO_BE_VERIFIED,
analysis_conf.states.result.VERIFIED]
processed = any([res.status in states for res in self.analysis_results])
return processed
@ -136,7 +135,6 @@ class WorkSheet(WSBase):
if self.state != conf.worksheet_states.TO_BE_VERIFIED:
states = [
analysis_conf.states.result.RESULTED,
analysis_conf.states.result.TO_BE_VERIFIED,
analysis_conf.states.result.VERIFIED]
if all([res.status in states for res in self.analysis_results]):

View file

@ -103,10 +103,22 @@
</div>
<section class="my-4">
<button @click.prevent="submitResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Submit</button>
<button @click.prevent="retractResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Retract</button>
<button @click.prevent="verifyResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Verify</button>
<button @click.prevent="retestResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Retest</button>
<button
v-if="can_submit"
@click.prevent="submitResults()"
class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Submit</button>
<button
v-if="can_retract"
@click.prevent="retractResults()"
class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Retract</button>
<button
v-if="can_verify"
@click.prevent="verifyResults()"
class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Verify</button>
<button
v-if="can_retest"
@click.prevent="retestResults()"
class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Retest</button>
</section>
</template>
@ -117,7 +129,7 @@ import tabCases from '../comps/CaseTable.vue';
import tabLogs from '../../_components/timeline/AuditLog.vue';
import Swal from 'sweetalert2';
import { defineComponent, ref, toRefs, computed, PropType } from 'vue';
import { defineComponent, ref, toRefs, computed, PropType, watch } from 'vue';
import { useRoute } from 'vue-router';
import { useStore } from 'vuex';
import { useMutation } from '@urql/vue';
@ -132,6 +144,11 @@ export default defineComponent({
const route = useRoute();
const store = useStore();
let can_submit = ref(false);
let can_retract = ref(false);
let can_verify = ref(false);
let can_retest = ref(false);
let allChecked = ref(false);
store.dispatch(ActionTypes.FETCH_ANALYSIS_RESULTS_FOR_SAMPLE, route.params.sampleUid)
@ -191,22 +208,32 @@ export default defineComponent({
} else {
allChecked.value = false;
}
console.log("check action perms");
checkUserActionPermissios()
}
function check(result): void {
result.checked = true;
console.log("check action perms");
checkUserActionPermissios()
}
function unCheck(result): void {
result.checked = false;
console.log("check action perms");
checkUserActionPermissios()
}
function toggleCheckAll(): void {
analysisResults?.value?.forEach(result => allChecked.value ? check(result) : unCheck(result));
async function toggleCheckAll(): void {
await analysisResults?.value?.forEach(result => allChecked.value ? check(result) : unCheck(result));
console.log("check action perms");
checkUserActionPermissios()
}
function unCheckAll(): void {
analysisResults?.value?.forEach(result => unCheck(result))
async function unCheckAll(): void {
await analysisResults?.value?.forEach(result => unCheck(result))
console.log("check action perms");
checkUserActionPermissios()
}
function profileAnalysesText(profiles: IProfile[], analyses: IAnalysis[]): string {
@ -272,6 +299,34 @@ export default defineComponent({
}
}
function checkUserActionPermissios(): void {
// reset
can_submit.value = false;
can_retract.value = false;
can_verify.value = false;
can_retest.value = false;
const checked = getResultsChecked();
if(checked.length === 0) return;
// can submit
if(checked.every(result => result.status === 'pending')){
can_submit.value = true;
}
// can verify/ retract
if(checked.every(result => result.status === 'resulted')){
can_retract.value = true;
can_verify.value = true;
}
// can retest
if(checked.every(result => result.status === 'verified')){
can_retest.value = true;
}
}
const submitResults = async () => {
try {
Swal.fire({
@ -400,7 +455,11 @@ export default defineComponent({
submitResults,
verifyResults,
retractResults,
retestResults
retestResults,
can_submit,
can_retract,
can_verify,
can_retest,
}
},
});

View file

@ -103,11 +103,21 @@
</div>
<section class="my-4">
<button @click.prevent="unAssignSamples()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Un Assign</button>
<button @click.prevent="submitResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Submit</button>
<button @click.prevent="retractResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Retract</button>
<button @click.prevent="verifyResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Verify</button>
<button @click.prevent="retestResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Retest</button>
<button
v-if="can_unassign"
@click.prevent="unAssignSamples()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Un Assign</button>
<button
v-if="can_submit"
@click.prevent="submitResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Submit</button>
<button
v-if="can_retract"
@click.prevent="retractResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Retract</button>
<button
v-if="can_verify"
@click.prevent="verifyResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Verify</button>
<button
v-if="can_retest"
@click.prevent="retestResults()" class="px-2 py-1 mr-2 border-blue-500 border text-blue-500 rounded transition duration-300 hover:bg-blue-700 hover:text-white focus:outline-none">Retest</button>
</section>
</div>
@ -135,6 +145,12 @@ export default defineComponent({
const route = useRoute();
const store = useStore();
let can_submit = ref(false);
let can_retract = ref(false);
let can_verify = ref(false);
let can_retest = ref(false);
let can_unassign = ref(false);
let allChecked = ref(false);
let viewDetail = ref(false);
let worksheet = computed(()=> store.getters.getWorkSheet);
@ -196,6 +212,7 @@ export default defineComponent({
} else {
allChecked.value = false;
}
checkUserActionPermissios()
}
function check(result): void {
@ -204,6 +221,7 @@ export default defineComponent({
return;
};
result.checked = true;
checkUserActionPermissios()
}
function checkDisabled(result): boolean {
@ -212,14 +230,17 @@ export default defineComponent({
function unCheck(result): void {
result.checked = false;
checkUserActionPermissios()
}
function toggleCheckAll(): void {
worksheet?.value?.analysisResults?.forEach(result => allChecked.value ? check(result) : unCheck(result));
checkUserActionPermissios()
}
function unCheckAll(): void {
worksheet?.value?.analysisResults?.forEach(result => unCheck(result))
checkUserActionPermissios()
}
function analysesText(analyses: IAnalysis[]): string {
@ -298,6 +319,39 @@ export default defineComponent({
}
}
function checkUserActionPermissios(): void {
// reset
can_submit.value = false;
can_unassign.value = false;
can_retract.value = false;
can_verify.value = false;
can_retest.value = false;
const checked = getResultsChecked();
if(checked.length === 0) return;
// can submit
if(checked.every(result => result.status === 'pending')){
can_submit.value = true;
can_unassign.value = true;
}
// can verify/ retract
if(checked.every(result => result.status === 'resulted')){
can_retract.value = true;
can_verify.value = true;
}
// can retest
if(checked.every(result => result.status === 'verified')){
can_retest.value = true;
}
}
const submitResults = async () => {
try {
Swal.fire({
@ -455,7 +509,12 @@ export default defineComponent({
submitResults,
verifyResults,
retractResults,
retestResults
retestResults,
can_submit,
can_retract,
can_verify,
can_retest,
can_unassign,
};
},
});