@@ -9,6 +9,7 @@ import { DATA_ELEMENT_SUFFIX } from "../domain/common/entities/AppSettings";
99
1010const SUFFIX = DATA_ELEMENT_SUFFIX ;
1111const MAX_SHORT_NAME_LENGTH = 50 ;
12+ const MAX_NAME_LENGTH = 230 ;
1213
1314async function main ( ) {
1415 const parser = new ArgumentParser ( {
@@ -17,25 +18,23 @@ async function main() {
1718
1819 parser . add_argument ( "-ds" , "--dataSet" , {
1920 help : "DataSet code" ,
20- metavar : "dataSet" ,
2121 required : true ,
2222 } ) ;
2323
2424 parser . add_argument ( "--post" , {
2525 help : "Commit changes to DHIS2 (default: validate only)" ,
2626 default : false ,
27+ action : "storeTrue" ,
2728 } ) ;
2829
2930 parser . add_argument ( "--dataElement-submission" , {
3031 help : "Name/code for submission datetime dataElement" ,
31- metavar : "name" ,
32- required : false ,
32+ required : true ,
3333 } ) ;
3434
3535 parser . add_argument ( "--dataElement-approval" , {
3636 help : "Name/code for approval datetime dataElement" ,
37- metavar : "name" ,
38- required : false ,
37+ required : true ,
3938 } ) ;
4039
4140 try {
@@ -125,17 +124,9 @@ async function generateDataSetApproval(options: {
125124
126125 const newDataElements = validDataElements . map ( transformDataElement ) ;
127126
128- const customDataElements : NewDataElement [ ] = [ ] ;
129-
130- if ( dataElementSubmission ) {
131- const submissionDE = createCustomDataElement ( dataElementSubmission ) ;
132- customDataElements . push ( submissionDE ) ;
133- }
134-
135- if ( dataElementApproval ) {
136- const approvalDE = createCustomDataElement ( dataElementApproval ) ;
137- customDataElements . push ( approvalDE ) ;
138- }
127+ const submissionDE = dataElementSubmission ? [ createCustomDataElement ( dataElementSubmission ) ] : [ ] ;
128+ const approvalDE = dataElementApproval ? [ createCustomDataElement ( dataElementApproval ) ] : [ ] ;
129+ const customDataElements = [ ...submissionDE , ...approvalDE ] ;
139130
140131 const allNewDataElements = [ ...newDataElements , ...customDataElements ] ;
141132
@@ -227,7 +218,6 @@ type D2DataElement = {
227218 shortName : string ;
228219 code : string ;
229220 dataElementGroups ?: unknown [ ] ;
230- dimensionItem ?: string ;
231221 dataSetElements ?: unknown [ ] ;
232222 [ key : string ] : unknown ;
233223} ;
@@ -244,7 +234,7 @@ type NewDataSet = Omit<D2DataSet, "workflow" | "dataEntryForm" | "sections"> & {
244234 sections : Array < { id : string } > ;
245235} ;
246236
247- type NewDataElement = Omit < D2DataElement , "dataElementGroups" | "dimensionItem" | " dataSetElements"> & {
237+ type NewDataElement = Omit < D2DataElement , "dataElementGroups" | "dataSetElements" > & {
248238 id : string ;
249239 name : string ;
250240 shortName : string ;
@@ -365,27 +355,34 @@ function createCustomDataElement(name: string): NewDataElement {
365355}
366356
367357function transformDataElement ( original : D2DataElement ) : NewDataElement {
368- const {
369- dataElementGroups : _deGroups ,
370- dimensionItem : _dimItem ,
371- dataSetElements : _dsElements ,
372- id : _id ,
373- ...rest
374- } = original ;
358+ const { dataElementGroups : _deGroups , dataSetElements : _dsElements , id : _id , ...rest } = original ;
375359
376360 const hasCode = original . code && original . code . trim ( ) !== "" ;
377- const newCode = hasCode ? addSuffix ( original . code ) : "" ;
361+ const newCode = hasCode ? addSuffixAndTruncate ( original . code , MAX_SHORT_NAME_LENGTH ) : "" ;
378362 const newId = hasCode ? getUidFromSeed ( newCode ) : getUidFromSeed ( addSuffix ( original . id ) ) ;
379363
380364 return {
381365 ...rest ,
382366 id : newId ,
383- name : addSuffix ( original . name ) ,
384- shortName : addSuffix ( original . shortName ) ,
367+ name : addSuffixAndTruncate ( original . name , MAX_NAME_LENGTH ) ,
368+ shortName : addSuffixAndTruncate ( original . shortName , MAX_SHORT_NAME_LENGTH ) ,
385369 code : newCode ,
386370 } ;
387371}
388372
373+ function addSuffixAndTruncate ( code : string | undefined , maxLength : number ) : string {
374+ if ( ! code ) return "" ;
375+
376+ const codeLen = code . length ;
377+
378+ if ( codeLen + SUFFIX . length <= maxLength ) {
379+ return addSuffix ( code ) ;
380+ } else {
381+ const truncatedCode = code . substring ( 0 , maxLength - SUFFIX . length ) ;
382+ return addSuffix ( truncatedCode ) ;
383+ }
384+ }
385+
389386function createDataElementIdMap ( originals : D2DataElement [ ] , transformed : NewDataElement [ ] ) : Record < string , string > {
390387 const map : Record < string , string > = { } ;
391388 originals . forEach ( ( original , index ) => {
0 commit comments