mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
feat(FE-316): Add instruction sheet and format data sheet
This commit is contained in:
@@ -8,29 +8,69 @@ export const generateUniformityTemplate = (
|
|||||||
projectFlockKandangLookup: ProjectFlockKandangLookup
|
projectFlockKandangLookup: ProjectFlockKandangLookup
|
||||||
) => {
|
) => {
|
||||||
try {
|
try {
|
||||||
// Calculate 2% sample from total population
|
|
||||||
const sampleSize = Math.round(availableQuantity * 0.02);
|
const sampleSize = Math.round(availableQuantity * 0.02);
|
||||||
|
const kandangName = projectFlockKandangLookup.kandang?.name || 'Kandang';
|
||||||
|
const flockName = projectFlockKandangLookup.project_flock?.flock_name || '';
|
||||||
|
const flockPeriod = projectFlockKandangLookup.project_flock?.period || 1;
|
||||||
|
const locationName =
|
||||||
|
projectFlockKandangLookup.project_flock?.location?.name || '';
|
||||||
|
const areaName = projectFlockKandangLookup.project_flock?.area?.name || '';
|
||||||
|
|
||||||
|
const instructions = [
|
||||||
|
['PETUNJUK PENGISIAN DATA UNIFORMITY'],
|
||||||
|
[''],
|
||||||
|
['INFORMASI PROYEK'],
|
||||||
|
['Location', locationName],
|
||||||
|
['Area', areaName],
|
||||||
|
['Flock Name', flockName],
|
||||||
|
['Periode', flockPeriod],
|
||||||
|
['Kandang', kandangName],
|
||||||
|
['Total Populasi', formatNumber(availableQuantity)],
|
||||||
|
['Jumlah Sampel (2%)', formatNumber(sampleSize)],
|
||||||
|
[''],
|
||||||
|
['CARA PENGISIAN:'],
|
||||||
|
['1. Pindah ke sheet "Data" untuk mengisi data BW (Body Weight)'],
|
||||||
|
[
|
||||||
|
'2. Kolom NO sudah terisi otomatis dari 1 sampai ' +
|
||||||
|
formatNumber(sampleSize),
|
||||||
|
],
|
||||||
|
['3. Isi kolom BW dengan berat badan ayam dalam gram'],
|
||||||
|
['4. Pastikan semua baris terisi dengan data yang valid'],
|
||||||
|
['5. Simpan file dan upload kembali ke sistem'],
|
||||||
|
[''],
|
||||||
|
['FORMAT DATA:'],
|
||||||
|
['• NO: Nomor urut ayam (1, 2, 3, ...)'],
|
||||||
|
['• BW: Berat badan dalam gram (contoh: 1500, 1650, 1800)'],
|
||||||
|
[''],
|
||||||
|
['CATATAN:'],
|
||||||
|
['• Data yang diisi adalah sampel 2% dari total populasi'],
|
||||||
|
['• Pastikan timbangan dalam kondisi baik dan terkalibrasi'],
|
||||||
|
['• Lakukan pengukuran pada waktu yang sama setiap hari'],
|
||||||
|
];
|
||||||
|
|
||||||
|
const instructionSheet = XLSX.utils.aoa_to_sheet(instructions);
|
||||||
|
instructionSheet['!cols'] = [
|
||||||
|
{ wch: 30 }, // Column A width
|
||||||
|
{ wch: 40 }, // Column B width
|
||||||
|
];
|
||||||
|
|
||||||
const data = Array.from({ length: sampleSize }, (_, index) => ({
|
const data = Array.from({ length: sampleSize }, (_, index) => ({
|
||||||
NO: index + 1,
|
NO: index + 1,
|
||||||
BW: '',
|
BW: '',
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const worksheet = XLSX.utils.json_to_sheet(data, {
|
const dataWorksheet = XLSX.utils.json_to_sheet(data, {
|
||||||
header: ['NO', 'BW'],
|
header: ['NO', 'BW'],
|
||||||
});
|
});
|
||||||
|
|
||||||
worksheet['!cols'] = [{ wch: 10 }, { wch: 15 }];
|
dataWorksheet['!cols'] = [{ wch: 10 }, { wch: 15 }];
|
||||||
|
|
||||||
const workbook = XLSX.utils.book_new();
|
const workbook = XLSX.utils.book_new();
|
||||||
|
XLSX.utils.book_append_sheet(workbook, instructionSheet, 'Instruksi');
|
||||||
|
|
||||||
const kandangName = projectFlockKandangLookup.kandang?.name || 'Kandang';
|
const dataSheetName =
|
||||||
const flockName = projectFlockKandangLookup.project_flock?.flock_name || '';
|
|
||||||
const flockPeriod = projectFlockKandangLookup.project_flock?.period || 1;
|
|
||||||
|
|
||||||
const sheetName =
|
|
||||||
kandangName.length > 31 ? kandangName.substring(0, 31) : kandangName;
|
kandangName.length > 31 ? kandangName.substring(0, 31) : kandangName;
|
||||||
XLSX.utils.book_append_sheet(workbook, worksheet, sheetName);
|
XLSX.utils.book_append_sheet(workbook, dataWorksheet, dataSheetName);
|
||||||
|
|
||||||
const sanitizedFlockName = flockName
|
const sanitizedFlockName = flockName
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
|
|||||||
Reference in New Issue
Block a user