tango-app-api-trax 3.9.0-nike → 3.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tango-app-api-trax",
3
- "version": "3.9.0-nike",
3
+ "version": "3.9.2",
4
4
  "description": "Trax",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -483,6 +483,8 @@ export async function redoChecklist( req, res ) {
483
483
  redoStatus: true,
484
484
  reinitiateStatus: true,
485
485
  questionAnswers: question,
486
+ ...( checklistDetails.checklistStatus != 'submit' && checklistDetails.redoStatus ) ? { redoEdit: true } : {},
487
+ ...( ( checklistDetails.redoEdit === undefined && checklistConfigDetails.redoValidity ) ) ? { scheduleEndTime_iso: dayjs( checklistDetails.scheduleEndTime_iso ).add( checklistConfigDetails.redoValidity, 'day' ).format() } :{},
486
488
  };
487
489
 
488
490
  let response = await processedChecklist.updateOne( { _id: req.body.payload._id }, updateData );
@@ -495,6 +497,9 @@ export async function redoChecklist( req, res ) {
495
497
  // } else {
496
498
  // currentDateTime = dayjs();
497
499
  // }
500
+ if ( req.body?.payload?.answerName ) {
501
+ userAnswer = userAnswer?.filter( ( ele ) => ele.answer == req.body.payload.answerName );
502
+ }
498
503
  data = {
499
504
  checklistId: checklistDetails.sourceCheckList_id,
500
505
  checkListName: checklistDetails.checkListName,
@@ -3734,7 +3734,7 @@ export const downloadInsertPdf = async ( req, res ) => {
3734
3734
  Buffer.from( pdfBuffer );
3735
3735
 
3736
3736
  let pdfName;
3737
- if ( doc.store_id ) {
3737
+ if ( doc?.store_id ) {
3738
3738
  pdfName = `${safeName(
3739
3739
  doc.store_id + '_' + ( doc.storeName || 'store' ),
3740
3740
  )}.pdf`;
@@ -1552,6 +1552,557 @@ export async function sopMobilechecklistMultiSectionFormatterv1( req, res, next
1552
1552
 
1553
1553
  requestData.questionAnswers = sectionFormat;
1554
1554
  logger.error( { message: requestData.questionAnswers, error: 'QuestionanswersPayload' } );
1555
+
1556
+ if ( requestData.submittype == 'submit' ) {
1557
+ for ( let section of sectionFormat ) {
1558
+ for ( let question of section.questions ) {
1559
+ let mustValidate = !question.linkType || ( question.linkType && question.linkquestionenabled );
1560
+ if ( mustValidate && ( !question.userAnswer || !question.userAnswer.length ) ) {
1561
+ return res.sendError( 'Please Fill All Fields', 400 );
1562
+ }
1563
+ }
1564
+ }
1565
+ }
1566
+
1567
+ next();
1568
+ } catch ( error ) {
1569
+ logger.error( { function: 'sopMobilechecklistMultiSectionFormatter', error: error, body: req.body } );
1570
+ return res.sendError( error, 500 );
1571
+ }
1572
+ };
1573
+
1574
+ export async function sopMobilechecklistMultiSectionFormatterv2( req, res, next ) {
1575
+ try {
1576
+ let requestData = req.body;
1577
+ requestData.questionAnswers = typeof requestData.questionAnswers == 'string' ? JSON.parse( requestData.questionAnswers ) : requestData.questionAnswers;
1578
+ let getChecklistQA = await processedchecklist.findOne( { _id: new ObjectId( requestData.processedcheckListId ) }, { questionAnswers: 1, redoEdit: 1 } );
1579
+ let reqAnswers = requestData.questionAnswers;
1580
+ logger.error( { functionName: 'updatedPayload', message: reqAnswers } );
1581
+ let CLQAnswers = getChecklistQA.questionAnswers;
1582
+
1583
+ if ( requestData.submittype == 'submit' ) {
1584
+ if ( getChecklistQA?.redoEdit ) {
1585
+ requestData.submittype = 'draft';
1586
+ }
1587
+ reqAnswers.forEach( ( reqA ) => {
1588
+ if ( ![ 'multiplechoicemultiple', 'multipleImage', 'image/video' ].includes( reqA?.answerType ) && ( reqA.answerType == 'dropDown' && !reqA.allowMultiple ) ) {
1589
+ if ( ( !reqA.linkType && ( reqA.answer == null || reqA.answer == '' ) ) || ( reqA.linkType && reqA.linkquestionenabled && ( reqA.answer == null || reqA.answer == '' ) ) ) {
1590
+ return res.sendError( 'Please Fill All Fields', 400 );
1591
+ }
1592
+ }
1593
+ } );
1594
+ }
1595
+
1596
+ if ( requestData?.editSubmit && requestData?.editSubmit == 'true' ) {
1597
+ let sampleData = reqAnswers[0];
1598
+ CLQAnswers.forEach( ( section ) => {
1599
+ let requestSection = reqAnswers.filter( ( reqSection ) => reqSection.sectionName == section?.sectionOldName || reqSection.sectionName == section?.sectionName );
1600
+ if ( requestSection.length ) {
1601
+ requestSection.forEach( ( item ) => item.section_id = section.section_id );
1602
+ section.questions.forEach( ( question ) => {
1603
+ let sectionQuestion = requestSection.filter( ( secQuestion ) => secQuestion.qname == question.oldQname || secQuestion.qname == question.qname );
1604
+ if ( !sectionQuestion.length ) {
1605
+ let data = { ...requestSection[0] };
1606
+ data.answerType = question.answerType;
1607
+ data.qno = question.qno;
1608
+ data.uniqueqno = question.uniqueqno;
1609
+ data.uniqueqid = question.uniqueqid;
1610
+ data.qname = question.qname;
1611
+ data.oldQname = question?.oldQname || question.qname;
1612
+ data.answer = 'null';
1613
+ data.remarks = '';
1614
+ data.validationAnswer = '';
1615
+ data.Multianswer = [];
1616
+ data.linkType = question.linkType;
1617
+ data.linkquestionenabled = question.linkType;
1618
+ data.linkedQuestion = null;
1619
+ data.showLinked = null;
1620
+ data.parentanswer = '';
1621
+ data.dateRangeType = false;
1622
+ reqAnswers.push( data );
1623
+ }
1624
+ } );
1625
+ } else {
1626
+ section.questions.forEach( ( ele ) => {
1627
+ let data = { ...sampleData };
1628
+ data.section_id = section.section_id;
1629
+ data.sectionName = section.sectionName;
1630
+ data.answerType = ele.answerType;
1631
+ data.qno = ele.qno;
1632
+ data.uniqueqno = ele.uniqueqno;
1633
+ data.uniqueqid = ele.uniqueqid;
1634
+ data.qname = ele.qname;
1635
+ data.oldQname = ele?.oldQname || ele.qname;
1636
+ data.answer = 'null';
1637
+ data.remarks = '';
1638
+ data.validationAnswer = '';
1639
+ data.Multianswer = [];
1640
+ data.linkType = ele.linkType;
1641
+ data.linkquestionenabled = ele.linkType;
1642
+ data.linkedQuestion = null;
1643
+ data.showLinked = null;
1644
+ data.parentanswer = '';
1645
+ data.dateRangeType = false;
1646
+ reqAnswers.push( data );
1647
+ } );
1648
+ }
1649
+ } );
1650
+ }
1651
+
1652
+ let sectionFormat = [];
1653
+ let uniqueSections = {};
1654
+ reqAnswers.forEach( ( item ) => {
1655
+ const key = `${item.section_id}-${item.sectionName}`;
1656
+ if ( !uniqueSections[key] ) {
1657
+ uniqueSections[key] = { id: item.section_id, name: item.sectionName };
1658
+ }
1659
+ } );
1660
+ const uniqueArray = Object.values( uniqueSections );
1661
+ for ( let section of uniqueArray ) {
1662
+ let CLQSection = CLQAnswers.find( ( item ) => item.section_id.toString() == section.id.toString() );
1663
+ if ( CLQSection ) {
1664
+ let newArray = [];
1665
+ let qaAnswers = CLQSection.questions;
1666
+ let requestSection = reqAnswers.filter( ( item ) => item.section_id == section.id );
1667
+ for ( let i = 0; i < requestSection.length; i++ ) {
1668
+ for ( let j = 0; j < qaAnswers.length; j++ ) {
1669
+ if ( requestSection[i].qname == qaAnswers[j].oldQname || requestSection[i].qname == qaAnswers[j].qname ) {
1670
+ if ( qaAnswers[j].answerType == 'yes/no' ) {
1671
+ let qaans = qaAnswers[j].answers;
1672
+ let yn = [];
1673
+ if ( ( getChecklistQA?.redoEdit && qaAnswers[j].redo == requestSection[i].redo ) || !getChecklistQA?.redoEdit ) {
1674
+ for ( let k = 0; k < qaans.length; k++ ) {
1675
+ if ( requestSection[i].answer == qaans[k].answer ) {
1676
+ if ( qaans[k].validationType == 'Capture Image' || qaans[k].validationType == 'Capture Video' ) {
1677
+ if ( requestSection[i].validationAnswer ) {
1678
+ let validateAns = decodeURIComponent( requestSection[i].validationAnswer.split( '?' )[0] );
1679
+ if ( validateAns.length ) {
1680
+ let splitImgUrl = validateAns.split( '/' );
1681
+ if ( splitImgUrl.length > 1 ) {
1682
+ splitImgUrl.splice( 0, 3 );
1683
+ qaans[k].validationAnswer = splitImgUrl.join( '/' ) || '';
1684
+ }
1685
+ }
1686
+ }
1687
+ } else {
1688
+ // qaans[k].descriptivetype = qaAnswers[j].descriptivetype || '';
1689
+ qaans[k].validationAnswer = requestSection[i].validationAnswer || '';
1690
+ }
1691
+ if ( requestSection[i]?.runAIData && requestSection[i]?.runAIData?.length ) {
1692
+ qaans[k].runAIData = requestSection[i].runAIData;
1693
+ }
1694
+ yn.push( qaans[k] );
1695
+ }
1696
+ }
1697
+ }
1698
+ let structure = {};
1699
+ structure.qno = qaAnswers[j].qno;
1700
+ structure.uniqueqno = qaAnswers[j].uniqueqno;
1701
+ structure.uniqueqid = qaAnswers[j].uniqueqid;
1702
+ structure.qname = qaAnswers[j].qname;
1703
+ structure.answerType = qaAnswers[j].answerType;
1704
+ structure.runAI = qaAnswers[j].runAI;
1705
+ structure.runAIDescription = qaAnswers[j].runAIDescription;
1706
+ structure.allowUploadfromGallery = qaAnswers[j].allowUploadfromGallery;
1707
+ if ( ( getChecklistQA?.redoEdit && qaAnswers[j].redo == requestSection[i].redo ) || !getChecklistQA?.redoEdit ) {
1708
+ structure.remarks = requestSection[i].remarks;
1709
+ }
1710
+ structure.answers = qaAnswers[j].answers;
1711
+ structure.userAnswer = yn;
1712
+ structure.linkType = qaAnswers[j].linkType;
1713
+ structure.linkquestionenabled = requestSection[i].linkquestionenabled;
1714
+ structure.parentanswer = requestSection[i].parentanswer;
1715
+ structure.questionReferenceImage = qaAnswers[j].questionReferenceImage || '';
1716
+ structure.multiQuestionReferenceImage = qaAnswers[j].multiQuestionReferenceImage || [];
1717
+ structure.descriptivetype = qaAnswers[j].descriptivetype;
1718
+ structure.compliance = qaAnswers[j]?.compliance;
1719
+ // structure.parentQuestion = requestSection[i]?.parentQuestion || qaAnswers[j].qno;
1720
+ structure.oldQname = qaAnswers[j]?.oldQname || qaAnswers[j].qname;
1721
+ if ( qaAnswers[j]?.taskId ) {
1722
+ structure.taskId = qaAnswers[j]?.taskId;
1723
+ structure.task = true;
1724
+ }
1725
+ if ( typeof qaAnswers[j]?.redo === 'boolean' && requestData.submittype === 'submit' ) {
1726
+ structure.redo = false;
1727
+ } else if ( typeof qaAnswers[j]?.redo === 'boolean' && requestData.submittype === 'draft' ) {
1728
+ structure.redo = qaAnswers[j]?.redo;
1729
+ }
1730
+ if ( qaAnswers[j]?.redoComment ) {
1731
+ structure.redoComment = qaAnswers[j]?.redoComment;
1732
+ };
1733
+ newArray.push( structure );
1734
+ } else if ( qaAnswers[j].answerType == 'multiplechoicesingle' || ( qaAnswers[j].answerType == 'dropdown' && !qaAnswers[j].allowMultiple ) ) {
1735
+ let qaans = qaAnswers[j].answers;
1736
+ let ms = [];
1737
+ if ( ( getChecklistQA?.redoEdit && qaAnswers[j].redo == requestSection[i].redo ) || !getChecklistQA?.redoEdit ) {
1738
+ for ( let k = 0; k < qaans.length; k++ ) {
1739
+ if ( requestSection[i].answer == qaans[k].answer ) {
1740
+ if ( qaans[k].validationType == 'Capture Image' || qaans[k].validationType == 'Capture Video' ) {
1741
+ if ( requestSection[i].validationAnswer ) {
1742
+ let validationAnswer = decodeURIComponent( requestSection[i].validationAnswer.split( '?' )[0] );
1743
+ if ( validationAnswer.length ) {
1744
+ let splitImgUrl = validationAnswer.split( '/' );
1745
+ if ( splitImgUrl.length > 1 ) {
1746
+ splitImgUrl.splice( 0, 3 );
1747
+ qaans[k].validationAnswer = splitImgUrl.join( '/' ) || '';
1748
+ }
1749
+ }
1750
+ }
1751
+ } else {
1752
+ if ( qaans[k].validationType == 'Capture Multiple Image with description' ) {
1753
+ qaans[k]['validationImage']=[];
1754
+ if ( requestSection[i].validationImage.length ) {
1755
+ for ( let image of requestSection[i].validationImage ) {
1756
+ let validationAnswer = decodeURIComponent( image.split( '?' )[0] );
1757
+ if ( validationAnswer.length ) {
1758
+ let splitImgUrl = validationAnswer.split( '/' );
1759
+ if ( splitImgUrl.length > 1 ) {
1760
+ splitImgUrl.splice( 0, 3 );
1761
+ qaans[k].validationImage.push( splitImgUrl.join( '/' ) || '' );
1762
+ }
1763
+ };
1764
+ }
1765
+ }
1766
+ }
1767
+ // qaans[k].descriptivetype = qaAnswers[j].descriptivetype || '';
1768
+ qaans[k].validationAnswer = requestSection[i].validationAnswer || '';
1769
+ }
1770
+ if ( requestSection[i]?.runAIData && requestSection[i]?.runAIData?.length ) {
1771
+ qaans[k].runAIData = requestSection[i].runAIData;
1772
+ }
1773
+ ms.push( qaans[k] );
1774
+ }
1775
+ }
1776
+ }
1777
+ let structure = {};
1778
+ structure.qno = qaAnswers[j].qno;
1779
+ structure.uniqueqno = qaAnswers[j].uniqueqno;
1780
+ structure.uniqueqid = qaAnswers[j].uniqueqid;
1781
+ structure.qname = qaAnswers[j].qname;
1782
+ structure.answerType = qaAnswers[j].answerType;
1783
+ structure.runAI = qaAnswers[j].runAI;
1784
+ structure.runAIDescription = qaAnswers[j].runAIDescription;
1785
+ structure.allowUploadfromGallery = qaAnswers[j].allowUploadfromGallery;
1786
+ if ( ( getChecklistQA?.redoEdit && qaAnswers[j].redo == requestSection[i].redo ) || !getChecklistQA?.redoEdit ) {
1787
+ structure.remarks = requestSection[i].remarks;
1788
+ }
1789
+ structure.answers = qaAnswers[j].answers;
1790
+ structure.userAnswer = ms;
1791
+ structure.linkType = qaAnswers[j].linkType;
1792
+ structure.linkquestionenabled = requestSection[i].linkquestionenabled;
1793
+ structure.parentanswer = requestSection[i].parentanswer;
1794
+ structure.questionReferenceImage = qaAnswers[j].questionReferenceImage || '';
1795
+ structure.multiQuestionReferenceImage = qaAnswers[j].multiQuestionReferenceImage || [];
1796
+ structure.descriptivetype = qaAnswers[j].descriptivetype;
1797
+ structure.allowMultiple = qaAnswers[j].allowMultiple;
1798
+ structure.compliance = qaAnswers[j]?.compliance;
1799
+ // structure.parentQuestion = requestSection[i]?.parentQuestion || qaAnswers[j].qno;
1800
+ structure.oldQname = qaAnswers[j]?.oldQname || qaAnswers[j].qname;
1801
+ if ( qaAnswers[j]?.taskId ) {
1802
+ structure.taskId = qaAnswers[j]?.taskId;
1803
+ structure.task = true;
1804
+ }
1805
+ if ( typeof qaAnswers[j]?.redo === 'boolean' && requestData.submittype === 'submit' ) {
1806
+ structure.redo = false;
1807
+ } else if ( typeof qaAnswers[j]?.redo === 'boolean' && requestData.submittype === 'draft' ) {
1808
+ structure.redo = qaAnswers[j]?.redo;
1809
+ }
1810
+ if ( qaAnswers[j]?.redoComment ) {
1811
+ structure.redoComment = qaAnswers[j]?.redoComment;
1812
+ };
1813
+ newArray.push( structure );
1814
+ } else if ( qaAnswers[j].answerType == 'multiplechoicemultiple' || ( qaAnswers[j].answerType == 'dropdown' && qaAnswers[j].allowMultiple ) ) {
1815
+ let qaans = qaAnswers[j].answers;
1816
+ let mcmo = [];
1817
+ if ( ( getChecklistQA?.redoEdit && qaAnswers[j].redo == requestSection[i].redo ) || !getChecklistQA?.redoEdit || ( getChecklistQA?.redoEdit && qaAnswers[j].answers.some( ( ans ) => ans.redo ) ) ) {
1818
+ for ( let k = 0; k < qaans.length; k++ ) {
1819
+ let separatedArray = typeof requestSection[i].Multianswer == 'string' ? JSON.parse( requestSection[i].Multianswer ) : requestSection[i].Multianswer;
1820
+ for ( let s = 0; s < separatedArray.length; s++ ) {
1821
+ if ( ( separatedArray[s].answer == qaans[k].answer ) ) {
1822
+ console.log( qaans[k].redo, separatedArray[s].redo, qaans[k].redo == separatedArray[s].redo, qaans[k].answer );
1823
+ if ( ( getChecklistQA?.redoEdit && qaans[k].redo == separatedArray[s].redo ) || !getChecklistQA?.redoEdit ) {
1824
+ if ( qaans[k].validationType == 'Capture Image' || qaans[k].validationType == 'Capture Video' ) {
1825
+ if ( separatedArray[s].validationAnswer ) {
1826
+ let validationAnswer = decodeURIComponent( separatedArray[s].validationAnswer.split( '?' )[0] );
1827
+ if ( validationAnswer.length ) {
1828
+ let splitImgUrl = validationAnswer.split( '/' );
1829
+ if ( splitImgUrl.length > 1 ) {
1830
+ splitImgUrl.splice( 0, 3 );
1831
+ qaans[k].validationAnswer = splitImgUrl.join( '/' ) || '';
1832
+ }
1833
+ }
1834
+ }
1835
+ } else {
1836
+ // qaans[k].descriptivetype = qaAnswers[j].descriptivetype || '';
1837
+ qaans[k].validationAnswer = separatedArray[s].validationAnswer || '';
1838
+ }
1839
+ if ( separatedArray[s]?.runAIData && separatedArray[s]?.runAIData?.length ) {
1840
+ qaans[k].runAIData = separatedArray[s].runAIData;
1841
+ }
1842
+ mcmo.push( qaans[k] );
1843
+ }
1844
+ }
1845
+ }
1846
+ }
1847
+ }
1848
+ qaAnswers[j].answers.forEach( ( ele ) => {
1849
+ if ( typeof ele?.redo === 'boolean' && requestData.submittype === 'submit' ) {
1850
+ ele.redo = false;
1851
+ }
1852
+ } );
1853
+
1854
+ let structure = {};
1855
+ structure.qno = qaAnswers[j].qno;
1856
+ structure.uniqueqno = qaAnswers[j].uniqueqno;
1857
+ structure.qno = qaAnswers[j].qno;
1858
+ structure.qname = qaAnswers[j].qname;
1859
+ structure.answerType = qaAnswers[j].answerType;
1860
+ structure.runAI = qaAnswers[j].runAI;
1861
+ structure.runAIDescription = qaAnswers[j].runAIDescription;
1862
+ structure.allowUploadfromGallery = qaAnswers[j].allowUploadfromGallery;
1863
+ if ( ( getChecklistQA?.redoEdit && qaAnswers[j].redo == requestSection[i].redo ) || !getChecklistQA?.redoEdit ) {
1864
+ structure.remarks = requestSection[i].remarks;
1865
+ }
1866
+ structure.answers = qaAnswers[j].answers;
1867
+ structure.userAnswer = mcmo;
1868
+ structure.linkType = qaAnswers[j].linkType;
1869
+ structure.linkquestionenabled = requestSection[i].linkquestionenabled;
1870
+ structure.parentanswer = requestSection[i].parentanswer;
1871
+ structure.questionReferenceImage = qaAnswers[j].questionReferenceImage || '';
1872
+ structure.multiQuestionReferenceImage = qaAnswers[j].multiQuestionReferenceImage || [];
1873
+ structure.descriptivetype = qaAnswers[j].descriptivetype;
1874
+ structure.allowMultiple = qaAnswers[j].allowMultiple;
1875
+ structure.compliance = qaAnswers[j]?.compliance;
1876
+ // structure.parentQuestion = requestSection[i]?.parentQuestion || qaAnswers[j].qno;
1877
+ structure.oldQname = qaAnswers[j]?.oldQname || qaAnswers[j].qname;
1878
+ if ( qaAnswers[j]?.taskId ) {
1879
+ structure.taskId = qaAnswers[j]?.taskId;
1880
+ structure.task = true;
1881
+ }
1882
+ if ( typeof qaAnswers[j]?.redo === 'boolean' && requestData.submittype === 'submit' ) {
1883
+ structure.redo = false;
1884
+ } else if ( typeof qaAnswers[j]?.redo === 'boolean' && requestData.submittype === 'draft' ) {
1885
+ structure.redo = qaAnswers[j]?.redo;
1886
+ }
1887
+ if ( qaAnswers[j]?.redoComment ) {
1888
+ structure.redoComment = qaAnswers[j]?.redoComment;
1889
+ };
1890
+ newArray.push( structure );
1891
+ } else if ( [ 'image/video', 'multipleImage' ].includes( qaAnswers[j].answerType ) ) {
1892
+ let separatedArray = typeof requestSection[i].Multianswer == 'string' ? JSON.parse( requestSection[i].Multianswer ) : requestSection[i].Multianswer;
1893
+ let mcmi = [];
1894
+ if ( ( getChecklistQA?.redoEdit && qaAnswers[j].redo == requestSection[i].redo ) || !getChecklistQA?.redoEdit ) {
1895
+ // for (let k = 0; k < qaans.length; k++) {
1896
+ for ( let s = 0; s < separatedArray.length; s++ ) {
1897
+ if ( separatedArray[s].answer && separatedArray[s].answer !='' ) {
1898
+ let newAnswer = {};
1899
+ let validationAnswer = decodeURIComponent( separatedArray[s].answer.split( '?' )[0] );
1900
+ if ( validationAnswer.length ) {
1901
+ let splitImgUrl = validationAnswer.split( '/' );
1902
+ if ( splitImgUrl.length > 1 ) {
1903
+ splitImgUrl.splice( 0, 3 );
1904
+ newAnswer.answer = splitImgUrl.join( '/' ) || '';
1905
+ }
1906
+ }
1907
+
1908
+ newAnswer.answeroptionNumber = 0;
1909
+ newAnswer.sopFlag = false;
1910
+ newAnswer.validation = false;
1911
+ newAnswer.validationType = '';
1912
+ newAnswer.referenceImage = '';
1913
+ newAnswer.allowUploadfromGallery = false;
1914
+ newAnswer.descriptivetype = '';
1915
+ newAnswer.showLinked = false;
1916
+ newAnswer.linkedQuestion = 0;
1917
+ newAnswer.nestedQuestion = [];
1918
+ newAnswer.index = s;
1919
+ newAnswer.runAI = qaAnswers[j].answers[0]?.runAI || false;
1920
+ newAnswer.runAIFeatures = qaAnswers[j].answers[0]?.runAIFeatures || [];
1921
+ newAnswer.runAIDescription = qaAnswers[j].answers[0]?.runAIDescription || '';
1922
+ if ( qaAnswers[j].answerType == 'image/video' ) {
1923
+ newAnswer.answerType = separatedArray[s].answerType;
1924
+ }
1925
+ if ( separatedArray[s]?.runAIData && separatedArray[s]?.runAIData?.length ) {
1926
+ newAnswer.runAIData = separatedArray[s].runAIData;
1927
+ }
1928
+ mcmi.push( newAnswer );
1929
+ }
1930
+ }
1931
+ }
1932
+ // }
1933
+ let structure = {};
1934
+ structure.qno = qaAnswers[j].qno;
1935
+ structure.uniqueqno = qaAnswers[j].uniqueqno;
1936
+ structure.uniqueqid = qaAnswers[j].uniqueqid;
1937
+ structure.qname = qaAnswers[j].qname;
1938
+ structure.answerType = qaAnswers[j].answerType;
1939
+ structure.runAI = qaAnswers[j].runAI;
1940
+ structure.runAIDescription = qaAnswers[j].runAIDescription;
1941
+ structure.allowUploadfromGallery = qaAnswers[j].allowUploadfromGallery;
1942
+ if ( ( getChecklistQA?.redoEdit && qaAnswers[j].redo == requestSection[i].redo ) || !getChecklistQA?.redoEdit ) {
1943
+ structure.remarks = requestSection[i].remarks;
1944
+ }
1945
+ structure.answers = qaAnswers[j].answers;
1946
+ structure.userAnswer = mcmi;
1947
+ structure.linkType = qaAnswers[j].linkType;
1948
+ structure.linkquestionenabled = requestSection[i].linkquestionenabled;
1949
+ structure.parentanswer = requestSection[i].parentanswer;
1950
+ structure.questionReferenceImage = qaAnswers[j].questionReferenceImage || '';
1951
+ structure.multiQuestionReferenceImage = qaAnswers[j].multiQuestionReferenceImage || [];
1952
+ structure.descriptivetype = qaAnswers[j].descriptivetype;
1953
+ structure.compliance = qaAnswers[j]?.compliance;
1954
+ // structure.parentQuestion = requestSection[i]?.parentQuestion || qaAnswers[j].qno;
1955
+ structure.oldQname = qaAnswers[j]?.oldQname || qaAnswers[j].qname;
1956
+ if ( qaAnswers[j]?.taskId ) {
1957
+ structure.taskId = qaAnswers[j]?.taskId;
1958
+ structure.task = true;
1959
+ }
1960
+ if ( typeof qaAnswers[j]?.redo === 'boolean' && requestData.submittype === 'submit' ) {
1961
+ structure.redo = false;
1962
+ } else if ( typeof qaAnswers[j]?.redo === 'boolean' && requestData.submittype === 'draft' ) {
1963
+ structure.redo = qaAnswers[j]?.redo;
1964
+ }
1965
+ if ( qaAnswers[j]?.redoComment ) {
1966
+ structure.redoComment = qaAnswers[j]?.redoComment;
1967
+ };
1968
+ newArray.push( structure );
1969
+ } else {
1970
+ let des = [];
1971
+ if ( ( getChecklistQA?.redoEdit && qaAnswers[j].redo == requestSection[i].redo ) || !getChecklistQA?.redoEdit ) {
1972
+ if ( requestSection[i].answer != 'null' && requestSection[i].answer != '' && requestSection[i].answer != null ) {
1973
+ let validationAnswer = '';
1974
+ if ( requestSection[i].answer.split( '?' ).length > 1 || requestSection[i].answer.includes( 'https://' ) ) {
1975
+ validationAnswer = decodeURIComponent( requestSection[i].answer.split( '?' )[0] );
1976
+ }
1977
+ if ( validationAnswer.length ) {
1978
+ let splitImgUrl = validationAnswer.split( '/' );
1979
+ if ( splitImgUrl.length > 1 ) {
1980
+ splitImgUrl.splice( 0, 3 );
1981
+ requestSection[i].answer = splitImgUrl.join( '/' );
1982
+ }
1983
+ }
1984
+ let ansstructure = {
1985
+ answer: requestSection[i].answer,
1986
+ answeroptionNumber: 1,
1987
+ sopFlag: false,
1988
+ validation: false,
1989
+ validationType: '',
1990
+ validationAnswer: '',
1991
+ referenceImage: qaAnswers[j].answers[0].referenceImage || '',
1992
+ multiReferenceImage: qaAnswers[j].answers[0].multiReferenceImage || [],
1993
+ showLinked: qaAnswers[j].answers[0].showLinked,
1994
+ linkedQuestion: qaAnswers[j].answers[0].linkedQuestion,
1995
+ runAI: qaAnswers[j].answers[0]?.runAI || false,
1996
+ runAIFeatures: qaAnswers[j]?.answers[0]?.runAIFeatures || [],
1997
+ runAIDescription: qaAnswers[j].answers[0]?.runAIDescription || '',
1998
+ };
1999
+ if ( qaAnswers[j].answerType == 'date' ) {
2000
+ ansstructure.dateRangeType = requestSection[i].dateRangeType || false;
2001
+ if ( qaAnswers[j].compliance ) {
2002
+ if ( qaAnswers[j].compliance ) {
2003
+ let ansArray = requestSection[i].answer.split( ',' );
2004
+ if ( ansArray.includes( '-' ) ) {
2005
+ ansArray = requestSection[i].answer.split( '-' );
2006
+ }
2007
+ if ( ansArray.length > 1 && ansArray.some( ( date ) => dayjs( date, 'DD MMM YYYY' ).format( 'DD-MM-YYYY' ) >= qaAnswers[j]?.answers[0]?.startDate && dayjs( date, 'DD MMM YYYY' ) <= qaAnswers[j]?.answers[0]?.endDate ) ) {
2008
+ ansstructure.complianceScore = qaAnswers[j]?.answers[0]?.matchedCount;
2009
+ } else if ( ansArray.length > 1 && ( dayjs( ansArray?.[0], 'DD MMM YYYY' ).format( 'DD-MM-YYYY' ) >= qaAnswers[j]?.answers[0]?.startDate && dayjs( ansArray?.[1], 'DD MMM YYYY' ).format( 'DD-MM-YYYY' ) <= qaAnswers[j]?.answers[0]?.endDate ) ) {
2010
+ ansstructure.complianceScore = qaAnswers[j]?.answers[0]?.matchedCount;
2011
+ } else if ( dayjs( requestSection[i].answer, 'DD MMM YYYY' ) >= qaAnswers[j]?.answers[0]?.startDate && dayjs( requestSection[i].answer, 'DD MMM YYYY' ) <= qaAnswers[j]?.answers[0]?.endDate ) {
2012
+ ansstructure.complianceScore = qaAnswers[j]?.answers[0]?.matchedCount;
2013
+ } else {
2014
+ ansstructure.complianceScore = qaAnswers[j]?.answers[0]?.notMatchedCount;
2015
+ }
2016
+ }
2017
+ }
2018
+ }
2019
+ if ( qaAnswers[j].answerType == 'linearscale' ) {
2020
+ if ( qaAnswers[j].compliance ) {
2021
+ let linearAnswer = requestSection[i].answer.split( 'to' );
2022
+ if ( parseInt( linearAnswer?.[0] ) >= qaAnswers[j]?.answers[0]?.minValue && parseInt( linearAnswer?.[1] ) <= qaAnswers[j]?.answers[0]?.maxValue ) {
2023
+ ansstructure.complianceScore = qaAnswers[j]?.answers[0]?.matchedCount;
2024
+ } else {
2025
+ ansstructure.complianceScore = qaAnswers[j]?.answers[0]?.notMatchedCount;
2026
+ }
2027
+ }
2028
+ ansstructure.linearType = qaAnswers[j]?.answers[0]?.linearType;
2029
+ ansstructure.matchedCount = qaAnswers[j]?.answers[0]?.matchedCount;
2030
+ ansstructure.notMatchedCount = qaAnswers[j]?.answers[0]?.notMatchedCount;
2031
+ }
2032
+ if ( qaAnswers[j].answerType == 'image' ) {
2033
+ ansstructure.matchedCount = qaAnswers[j]?.answers[0]?.matchedCount;
2034
+ ansstructure.notMatchedCount = qaAnswers[j]?.answers[0]?.notMatchedCount;
2035
+ }
2036
+ if ( requestSection[i]?.runAIData && requestSection[i]?.runAIData?.length ) {
2037
+ ansstructure.runAIData = requestSection[i].runAIData;
2038
+ }
2039
+ des.push( ansstructure );
2040
+ }
2041
+ }
2042
+ let structure = {};
2043
+ structure.qno = qaAnswers[j].qno;
2044
+ structure.uniqueqno = qaAnswers[j].uniqueqno;
2045
+ structure.uniqueqid = qaAnswers[j].uniqueqid;
2046
+ structure.qname = qaAnswers[j].qname;
2047
+ structure.answerType = qaAnswers[j].answerType;
2048
+ structure.runAI = qaAnswers[j].runAI;
2049
+ structure.runAIDescription = qaAnswers[j].runAIDescription;
2050
+ structure.allowUploadfromGallery = qaAnswers[j].allowUploadfromGallery;
2051
+ if ( ( getChecklistQA?.redoEdit && qaAnswers[j].redo == requestSection[i].redo ) || !getChecklistQA?.redoEdit ) {
2052
+ structure.remarks = requestSection[i].remarks;
2053
+ }
2054
+ structure.answers = qaAnswers[j].answers;
2055
+ structure.userAnswer = des;
2056
+ structure.linkType = qaAnswers[j].linkType;
2057
+ structure.linkquestionenabled = requestSection[i].linkquestionenabled;
2058
+ structure.parentanswer = requestSection[i].parentanswer;
2059
+ structure.questionReferenceImage = qaAnswers[j].questionReferenceImage || '';
2060
+ structure.multiQuestionReferenceImage = qaAnswers[j].multiQuestionReferenceImage || [];
2061
+ structure.descriptivetype = qaAnswers[j].descriptivetype;
2062
+ // structure.parentQuestion = requestSection[i]?.parentQuestion || qaAnswers[j].qno;
2063
+ structure.oldQname = qaAnswers[j]?.oldQname || qaAnswers[j].qname;
2064
+ structure.compliance = qaAnswers[j]?.compliance;
2065
+ if ( qaAnswers[j]?.taskId ) {
2066
+ structure.taskId = qaAnswers[j]?.taskId;
2067
+ structure.task = true;
2068
+ }
2069
+ if ( typeof qaAnswers[j]?.redo === 'boolean' && requestData.submittype === 'submit' ) {
2070
+ structure.redo = false;
2071
+ } else if ( typeof qaAnswers[j]?.redo === 'boolean' && requestData.submittype === 'draft' ) {
2072
+ structure.redo = qaAnswers[j]?.redo;
2073
+ }
2074
+ if ( qaAnswers[j]?.redoComment ) {
2075
+ structure.redoComment = qaAnswers[j]?.redoComment;
2076
+ };
2077
+ newArray.push( structure );
2078
+ }
2079
+ }
2080
+ }
2081
+ }
2082
+ let sectionData = {
2083
+ 'section_id': section.id,
2084
+ 'sectionName': section.name,
2085
+ 'questions': newArray,
2086
+ };
2087
+ sectionFormat.push( sectionData );
2088
+ }
2089
+ }
2090
+
2091
+
2092
+ requestData.questionAnswers = sectionFormat;
2093
+ logger.error( { message: requestData.questionAnswers, error: 'QuestionanswersPayload' } );
2094
+
2095
+ if ( requestData.submittype == 'submit' ) {
2096
+ for ( let section of sectionFormat ) {
2097
+ for ( let question of section.questions ) {
2098
+ let mustValidate = !question.linkType || ( question.linkType && question.linkquestionenabled );
2099
+ if ( mustValidate && ( !question.userAnswer || !question.userAnswer.length ) ) {
2100
+ return res.sendError( 'Please Fill All Fields', 400 );
2101
+ }
2102
+ }
2103
+ }
2104
+ }
2105
+
1555
2106
  next();
1556
2107
  } catch ( error ) {
1557
2108
  logger.error( { function: 'sopMobilechecklistMultiSectionFormatter', error: error, body: req.body } );
@@ -2315,8 +2866,11 @@ export async function submitChecklist( req, res ) {
2315
2866
  }
2316
2867
  }
2317
2868
  }
2318
-
2319
- return res.sendSuccess( 'Checklist Updated Successfully' );
2869
+ if ( getchecklist?.[0]?.redoEdit ) {
2870
+ return res.sendSuccess( 'New Questions Added So,Checklist moved back to In Progress. Please complete the updated checklist.' );
2871
+ } else {
2872
+ return res.sendSuccess( 'Checklist Updated Successfully' );
2873
+ }
2320
2874
  } else {
2321
2875
  return res.sendError( 'something went wrong please try again', 500 );
2322
2876
  }