File size: 2,037 Bytes
ef874e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import prisma from './db';

interface MoveTrashParams {
  instance: any;
  entityType: 'produk' | 'kategori' | 'supplier' | 'member';
  actorId: number;
}

export const moveToTrash = async (params: MoveTrashParams) => {
  const { instance, entityType, actorId } = params;

  const dataPayload: any = {
    main_record: instance,
  };

  if (entityType === 'produk') {
    // harga_tingkat
    const hargaTingkat = await prisma.harga_tingkat.findMany({
      where: { produk_id: instance.id },
    });
    dataPayload.harga_tingkat = hargaTingkat;

    // stok_batch
    const stokBatch = await prisma.stok_batch.findMany({
      where: { produk_id: instance.id },
    });
    dataPayload.stok_batch = stokBatch;

    // stok_log
    const stokLog = await prisma.stok_log.findMany({
      where: { produk_id: instance.id },
    });
    dataPayload.stok_log = stokLog;

    // stok_opname
    const stokOpname = await prisma.stok_opname.findMany({
      where: { produk_id: instance.id },
    });
    dataPayload.stok_opname = stokOpname;
  }

  // Simpan payload di tabel trash
  await prisma.trash.create({
    data: {
      entity_type: entityType,
      entity_id: instance.id,
      data: JSON.stringify(dataPayload),
      deleted_by: actorId,
      deleted_at: new Date(),
    },
  });

  // Soft delete / Nonaktifkan record aslinya
  const deletedAt = new Date();
  if (entityType === 'produk') {
    await prisma.produk.update({
      where: { id: instance.id },
      data: { deleted_at: deletedAt, is_aktif: 0 },
    });
  } else if (entityType === 'kategori') {
    await prisma.kategori.update({
      where: { id: instance.id },
      data: { deleted_at: deletedAt, aktif: 0 },
    });
  } else if (entityType === 'supplier') {
    await prisma.supplier.update({
      where: { id: instance.id },
      data: { deleted_at: deletedAt, aktif: 0 },
    });
  } else if (entityType === 'member') {
    await prisma.member.update({
      where: { id: instance.id },
      data: { deleted_at: deletedAt, aktif: 0 },
    });
  }
};