feat: add receipt support for attachments (#89)

* add receipt support for attachments

* fix show logic
This commit is contained in:
Hayden 2022-10-15 19:45:36 -08:00 committed by GitHub
parent dbaaf4ad0a
commit 57f9372e49
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 25 additions and 4 deletions

View file

@ -95,6 +95,7 @@ const (
TypeManual Type = "manual" TypeManual Type = "manual"
TypeWarranty Type = "warranty" TypeWarranty Type = "warranty"
TypeAttachment Type = "attachment" TypeAttachment Type = "attachment"
TypeReceipt Type = "receipt"
) )
func (_type Type) String() string { func (_type Type) String() string {
@ -104,7 +105,7 @@ func (_type Type) String() string {
// TypeValidator is a validator for the "type" field enum values. It is called by the builders before save. // TypeValidator is a validator for the "type" field enum values. It is called by the builders before save.
func TypeValidator(_type Type) error { func TypeValidator(_type Type) error {
switch _type { switch _type {
case TypePhoto, TypeManual, TypeWarranty, TypeAttachment: case TypePhoto, TypeManual, TypeWarranty, TypeAttachment, TypeReceipt:
return nil return nil
default: default:
return fmt.Errorf("attachment: invalid enum value for type field: %q", _type) return fmt.Errorf("attachment: invalid enum value for type field: %q", _type)

View file

@ -13,7 +13,7 @@ var (
{Name: "id", Type: field.TypeUUID}, {Name: "id", Type: field.TypeUUID},
{Name: "created_at", Type: field.TypeTime}, {Name: "created_at", Type: field.TypeTime},
{Name: "updated_at", Type: field.TypeTime}, {Name: "updated_at", Type: field.TypeTime},
{Name: "type", Type: field.TypeEnum, Enums: []string{"photo", "manual", "warranty", "attachment"}, Default: "attachment"}, {Name: "type", Type: field.TypeEnum, Enums: []string{"photo", "manual", "warranty", "attachment", "receipt"}, Default: "attachment"},
{Name: "document_attachments", Type: field.TypeUUID}, {Name: "document_attachments", Type: field.TypeUUID},
{Name: "item_attachments", Type: field.TypeUUID}, {Name: "item_attachments", Type: field.TypeUUID},
} }

View file

@ -22,7 +22,7 @@ func (Attachment) Mixin() []ent.Mixin {
func (Attachment) Fields() []ent.Field { func (Attachment) Fields() []ent.Field {
return []ent.Field{ return []ent.Field{
field.Enum("type"). field.Enum("type").
Values("photo", "manual", "warranty", "attachment"). Values("photo", "manual", "warranty", "attachment", "receipt").
Default("attachment"), Default("attachment"),
} }
} }

View file

@ -3,6 +3,7 @@ export enum AttachmentTypes {
Manual = "manual", Manual = "manual",
Warranty = "warranty", Warranty = "warranty",
Attachment = "attachment", Attachment = "attachment",
Receipt = "receipt",
} }
export type Result<T> = { export type Result<T> = {

View file

@ -190,6 +190,7 @@
const dropAttachment = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Attachment); const dropAttachment = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Attachment);
const dropWarranty = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Warranty); const dropWarranty = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Warranty);
const dropManual = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Manual); const dropManual = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Manual);
const dropReceipt = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Receipt);
async function uploadAttachment(files: File[] | null, type: AttachmentTypes) { async function uploadAttachment(files: File[] | null, type: AttachmentTypes) {
if (!files && files.length === 0) { if (!files && files.length === 0) {
@ -378,6 +379,7 @@
<DropZone @drop="dropWarranty"> Warranty </DropZone> <DropZone @drop="dropWarranty"> Warranty </DropZone>
<DropZone @drop="dropManual"> Manual </DropZone> <DropZone @drop="dropManual"> Manual </DropZone>
<DropZone @drop="dropAttachment"> Attachment </DropZone> <DropZone @drop="dropAttachment"> Attachment </DropZone>
<DropZone @drop="dropReceipt"> Receipt </DropZone>
</div> </div>
<button <button
v-else v-else

View file

@ -31,6 +31,7 @@
attachments: ItemAttachment[]; attachments: ItemAttachment[];
warranty: ItemAttachment[]; warranty: ItemAttachment[];
manuals: ItemAttachment[]; manuals: ItemAttachment[];
receipts: ItemAttachment[];
}; };
const attachments = computed<FilteredAttachments>(() => { const attachments = computed<FilteredAttachments>(() => {
@ -40,6 +41,7 @@
attachments: [], attachments: [],
manuals: [], manuals: [],
warranty: [], warranty: [],
receipts: [],
}; };
} }
@ -51,6 +53,8 @@
acc.warranty.push(attachment); acc.warranty.push(attachment);
} else if (attachment.type === "manual") { } else if (attachment.type === "manual") {
acc.manuals.push(attachment); acc.manuals.push(attachment);
} else if (attachment.type === "receipt") {
acc.receipts.push(attachment);
} else { } else {
acc.attachments.push(attachment); acc.attachments.push(attachment);
} }
@ -61,6 +65,7 @@
attachments: [] as ItemAttachment[], attachments: [] as ItemAttachment[],
warranty: [] as ItemAttachment[], warranty: [] as ItemAttachment[],
manuals: [] as ItemAttachment[], manuals: [] as ItemAttachment[],
receipts: [] as ItemAttachment[],
} }
); );
}); });
@ -103,7 +108,8 @@
attachments.value.photos.length > 0 || attachments.value.photos.length > 0 ||
attachments.value.attachments.length > 0 || attachments.value.attachments.length > 0 ||
attachments.value.warranty.length > 0 || attachments.value.warranty.length > 0 ||
attachments.value.manuals.length > 0 attachments.value.manuals.length > 0 ||
attachments.value.receipts.length > 0
); );
}); });
@ -134,6 +140,10 @@
push("Manuals"); push("Manuals");
} }
if (attachments.value.receipts.length > 0) {
push("Receipts");
}
return details; return details;
}); });
@ -323,6 +333,13 @@
:item-id="item.id" :item-id="item.id"
/> />
</template> </template>
<template #receipts>
<ItemAttachmentsList
v-if="attachments.receipts.length > 0"
:attachments="attachments.receipts"
:item-id="item.id"
/>
</template>
</DetailsSection> </DetailsSection>
</BaseCard> </BaseCard>