Merge branch 'master' into development_aamir

# Conflicts:
#	lib/classes/colors.dart
#	lib/classes/consts.dart
fatima
Aamir Muhammad 2 years ago
commit ee0e774611

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" width="25.48" height="26.189" viewBox="0 0 25.48 26.189">
<g id="calendar_3_" data-name="calendar (3)" transform="translate(-5.411 -1)">
<g id="Group_7900" data-name="Group 7900" transform="translate(5.41 1)">
<path id="Path_4715" data-name="Path 4715" d="M119.972,258.777a.535.535,0,0,0-.535-.535H117.57a.535.535,0,0,0-.535.535v1.867a.535.535,0,0,0,.535.535h1.867a.535.535,0,0,0,.535-.535v-1.867Z" transform="translate(-111.644 -245.771)" fill="#fff"/>
<path id="Path_4716" data-name="Path 4716" d="M216.607,258.777a.535.535,0,0,0-.535-.535H214.2a.535.535,0,0,0-.535.535v1.867a.535.535,0,0,0,.535.535h1.867a.535.535,0,0,0,.535-.535Z" transform="translate(-203.612 -245.771)" fill="#fff"/>
<path id="Path_14060" data-name="Path 14060" d="M216.607,258.777a.535.535,0,0,0-.535-.535H214.2a.535.535,0,0,0-.535.535v1.867a.535.535,0,0,0,.535.535h1.867a.535.535,0,0,0,.535-.535Z" transform="translate(-198.946 -245.771)" fill="#fff"/>
<path id="Path_14059" data-name="Path 14059" d="M216.607,258.777a.535.535,0,0,0-.535-.535H214.2a.535.535,0,0,0-.535.535v1.867a.535.535,0,0,0,.535.535h1.867a.535.535,0,0,0,.535-.535Z" transform="translate(-203.612 -241.104)" fill="#fff"/>
<path id="Path_4718" data-name="Path 4718" d="M119.972,355.41a.535.535,0,0,0-.535-.535H117.57a.535.535,0,0,0-.535.535v1.867a.535.535,0,0,0,.535.535h1.867a.535.535,0,0,0,.535-.535V355.41Z" transform="translate(-111.644 -337.738)" fill="#fff"/>
<path id="Subtraction_61" data-name="Subtraction 61" d="M14.741,20.96H2.114A2.122,2.122,0,0,1,0,18.835V2.122A2.128,2.128,0,0,1,2.053.013V2.863A2.332,2.332,0,0,0,4.388,5.189H5.861A2.339,2.339,0,0,0,8.208,2.863V0h6.638V2.863a2.339,2.339,0,0,0,2.347,2.326h1.474A2.332,2.332,0,0,0,21,2.863V.013a2.129,2.129,0,0,1,2.052,2.109v9.9H20.314V9.16a.913.913,0,0,0-.91-.913H3.609A.915.915,0,0,0,2.7,9.16v8.635a.914.914,0,0,0,.914.913H14.741v2.251Z" transform="translate(0 2.613)" fill="#fff"/>
<path id="Path_4722" data-name="Path 4722" d="M80.351,6.275h1.457a.8.8,0,0,0,.8-.8V.8a.8.8,0,0,0-.8-.8H80.351a.8.8,0,0,0-.8.8V5.475A.8.8,0,0,0,80.351,6.275Z" transform="translate(-75.969)" fill="#fff"/>
<path id="Path_4723" data-name="Path 4723" d="M345.259,6.275h1.457a.8.8,0,0,0,.8-.8V.8a.8.8,0,0,0-.8-.8h-1.457a.8.8,0,0,0-.8.8V5.475A.8.8,0,0,0,345.259,6.275Z" transform="translate(-328.084)" fill="#fff"/>
<g id="check" transform="translate(15.507 16.216)">
<path id="Subtraction_62" data-name="Subtraction 62" d="M8.479,9.974H1.5A1.5,1.5,0,0,1,0,8.476V1.494A1.5,1.5,0,0,1,1.5,0H8.479a1.5,1.5,0,0,1,1.5,1.494V8.476A1.5,1.5,0,0,1,8.479,9.974ZM2.43,4.444a.5.5,0,0,0-.358.149l-.238.239a.5.5,0,0,0,0,.712L3.738,7.451a.339.339,0,0,0,.236.1.35.35,0,0,0,.239-.1L8.14,3.522a.493.493,0,0,0,.149-.354.508.508,0,0,0-.149-.361L7.9,2.571a.509.509,0,0,0-.358-.15.5.5,0,0,0-.357.15L3.975,5.782,2.787,4.594A.5.5,0,0,0,2.43,4.444Z" fill="#fff"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="333" height="88.222" viewBox="0 0 333 88.222">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="334" height="89" viewBox="0 0 334 89">
<defs>
<clipPath id="clip-path">
<rect id="Rectangle_17532" data-name="Rectangle 17532" width="54.986" height="20.029" fill="none"/>
@ -28,87 +28,87 @@
<rect id="Rectangle_17617" data-name="Rectangle 17617" width="10.274" height="13.454" fill="none"/>
</clipPath>
<clipPath id="clip-path-12">
<rect id="Rectangle_17619" data-name="Rectangle 17619" width="6.621" height="5.261" fill="none"/>
<rect id="Rectangle_17619" data-name="Rectangle 17619" width="6.621" height="5.261" fill="#135d3d"/>
</clipPath>
<clipPath id="clip-path-13">
<rect id="Rectangle_17620" data-name="Rectangle 17620" width="61.469" height="15.006" fill="none"/>
</clipPath>
<clipPath id="clip-path-14">
<rect id="Rectangle_17693" data-name="Rectangle 17693" width="333" height="88" rx="15" transform="translate(1 4.523)" fill="#fff"/>
<rect id="Rectangle_17693" data-name="Rectangle 17693" width="333" height="88" rx="15" fill="#fff"/>
</clipPath>
<clipPath id="clip-path-15">
<rect id="Rectangle_17685" data-name="Rectangle 17685" width="111.63" height="15.945" transform="translate(0 0)" fill="none"/>
<rect id="Rectangle_17685" data-name="Rectangle 17685" width="111.63" height="15.945" fill="none"/>
</clipPath>
<clipPath id="clip-path-16">
<rect id="Rectangle_17626" data-name="Rectangle 17626" width="111.63" height="15.947" transform="translate(0 0)" fill="none"/>
<rect id="Rectangle_17626" data-name="Rectangle 17626" width="111.63" height="15.947" fill="none"/>
</clipPath>
<clipPath id="clip-path-18">
<rect id="Rectangle_17684" data-name="Rectangle 17684" width="111.63" height="15.894" transform="translate(0 0)" fill="none"/>
<rect id="Rectangle_17684" data-name="Rectangle 17684" width="111.63" height="15.894" fill="none"/>
</clipPath>
<clipPath id="clip-path-19">
<rect id="Rectangle_17683" data-name="Rectangle 17683" width="111.63" height="15.748" transform="translate(0 0)" fill="none"/>
<rect id="Rectangle_17683" data-name="Rectangle 17683" width="111.63" height="15.748" fill="none"/>
</clipPath>
</defs>
<g id="Group_8897" data-name="Group 8897" transform="translate(-21 -321.778)">
<g id="Group_8890" data-name="Group 8890" transform="translate(20 317.477)">
<g id="Group_8745" data-name="Group 8745">
<rect id="Rectangle_17692" data-name="Rectangle 17692" width="333" height="88" rx="15" transform="translate(1 4.523)" fill="#fff"/>
<g id="Group_8889" data-name="Group 8889" transform="translate(1)">
<g id="Group_8902" data-name="Group 8902">
<rect id="Rectangle_17523" data-name="Rectangle 17523" width="26.188" height="0.075" transform="translate(22.754 84.584)" fill="#ebebeb"/>
<g id="Group_8796" data-name="Group 8796" transform="translate(-14 -13.831)">
<g id="Group_8903" data-name="Group 8903">
<path id="Path_13976" data-name="Path 13976" d="M375.306,83.743l1.573-.7H389.2l2.8,5.96v1.567Z" transform="translate(-270.385 -58.043)" fill="#e0e0e0"/>
<rect id="Rectangle_17524" data-name="Rectangle 17524" width="1.229" height="49.47" transform="translate(114.478 30.231)" fill="#e0e0e0"/>
<path id="Path_13977" data-name="Path 13977" d="M392.3,92.514H378.694l-3.123-6.829h13.605Z" transform="translate(-270.576 -59.887)" fill="#f0f0f0"/>
<path id="Path_13978" data-name="Path 13978" d="M383.558,88.875c.321.7.022,1.271-.667,1.271a2.248,2.248,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-274.439 -61.228)" fill="#fafafa"/>
<path id="Path_13979" data-name="Path 13979" d="M394.938,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-282.637 -61.228)" fill="#fafafa"/>
<path id="Path_13980" data-name="Path 13980" d="M406.318,88.875c.321.7.022,1.271-.667,1.271a2.248,2.248,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-290.836 -61.228)" fill="#fafafa"/>
<path id="Path_13981" data-name="Path 13981" d="M417.7,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-299.034 -61.228)" fill="#fafafa"/>
<path id="Path_13982" data-name="Path 13982" d="M388.681,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-278.13 -68.499)" fill="#fafafa"/>
<path id="Path_13983" data-name="Path 13983" d="M400.061,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-286.328 -68.499)" fill="#fafafa"/>
<path id="Path_13984" data-name="Path 13984" d="M411.442,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-294.527 -68.499)" fill="#fafafa"/>
<path id="Path_13985" data-name="Path 13985" d="M422.821,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-302.725 -68.499)" fill="#fafafa"/>
<path id="Path_13986" data-name="Path 13986" d="M106.306,83.743l1.573-.7H120.2l2.8,5.96v1.567Z" transform="translate(-76.587 -58.043)" fill="#e0e0e0"/>
<rect id="Rectangle_17525" data-name="Rectangle 17525" width="1.229" height="49.47" transform="translate(39.276 30.231)" fill="#e0e0e0"/>
<path id="Path_13987" data-name="Path 13987" d="M123.3,92.514H109.694l-3.123-6.829h13.605Z" transform="translate(-76.778 -59.887)" fill="#f0f0f0"/>
<path id="Path_13988" data-name="Path 13988" d="M114.558,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-80.641 -61.228)" fill="#fafafa"/>
<path id="Path_13989" data-name="Path 13989" d="M125.939,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-88.84 -61.228)" fill="#fafafa"/>
<path id="Path_13990" data-name="Path 13990" d="M137.318,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-97.037 -61.228)" fill="#fafafa"/>
<path id="Path_13991" data-name="Path 13991" d="M148.7,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-105.236 -61.228)" fill="#fafafa"/>
<path id="Path_13992" data-name="Path 13992" d="M119.681,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-84.332 -68.499)" fill="#fafafa"/>
<path id="Path_13993" data-name="Path 13993" d="M131.061,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-92.53 -68.499)" fill="#fafafa"/>
<path id="Path_13994" data-name="Path 13994" d="M142.441,99.278c.321.7.022,1.271-.667,1.271a2.248,2.248,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-100.729 -68.499)" fill="#fafafa"/>
<path id="Path_13995" data-name="Path 13995" d="M153.822,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-108.928 -68.499)" fill="#fafafa"/>
<path id="Path_13996" data-name="Path 13996" d="M227.482,166.051H170.545v6.925h-7.227V180.2h-7.012v6.925h-7.288v22.882h78.464Z" transform="translate(-107.359 -116.056)" fill="#e0e0e0"/>
<rect id="Rectangle_17526" data-name="Rectangle 17526" width="48.83" height="6.254" transform="translate(63.186 50.666)" fill="#ebebeb"/>
<rect id="Rectangle_17527" data-name="Rectangle 17527" width="48.872" height="6.457" transform="translate(55.959 57.689)" fill="#ebebeb"/>
<rect id="Rectangle_17528" data-name="Rectangle 17528" width="48.849" height="6.358" transform="translate(48.948 64.712)" fill="#ebebeb"/>
<rect id="Rectangle_17529" data-name="Rectangle 17529" width="48.83" height="6.254" transform="translate(41.66 71.823)" fill="#ebebeb"/>
<g id="Group_8897" data-name="Group 8897" transform="translate(-20.5 -321.5)">
<g id="Group_8890" data-name="Group 8890" transform="translate(21 321.778)">
<g id="Group_8745" data-name="Group 8745" transform="translate(0 0)">
<rect id="Rectangle_17692" data-name="Rectangle 17692" width="333" height="88" rx="15" transform="translate(0 0.222)" fill="#fff" stroke="#f5f5f5" stroke-width="1"/>
<g id="Group_8889" data-name="Group 8889" transform="translate(0.31 4.779)">
<g id="Group_8902" data-name="Group 8902" transform="translate(0)">
<rect id="Rectangle_17523" data-name="Rectangle 17523" width="26.188" height="0.075" transform="translate(22.444 75.504)" fill="#ebebeb"/>
<g id="Group_8796" data-name="Group 8796" transform="translate(15.409 2.089)">
<g id="Group_8903" data-name="Group 8903" transform="translate(0 0)">
<path id="Path_13976" data-name="Path 13976" d="M375.306,83.743l1.573-.7H389.2L392,89V90.57Z" transform="translate(-300.104 -83.043)" fill="#e0e0e0"/>
<rect id="Rectangle_17524" data-name="Rectangle 17524" width="1.229" height="49.47" transform="translate(84.759 5.231)" fill="#e0e0e0"/>
<path id="Path_13977" data-name="Path 13977" d="M392.3,92.514H378.694l-3.123-6.829h13.605Z" transform="translate(-300.295 -84.887)" fill="#f0f0f0"/>
<path id="Path_13978" data-name="Path 13978" d="M383.558,88.875c.321.7.022,1.271-.667,1.271a2.248,2.248,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-304.158 -86.228)" fill="#fafafa"/>
<path id="Path_13979" data-name="Path 13979" d="M394.938,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-312.356 -86.228)" fill="#fafafa"/>
<path id="Path_13980" data-name="Path 13980" d="M406.318,88.875c.321.7.022,1.271-.667,1.271a2.248,2.248,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-320.555 -86.228)" fill="#fafafa"/>
<path id="Path_13981" data-name="Path 13981" d="M417.7,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-328.753 -86.228)" fill="#fafafa"/>
<path id="Path_13982" data-name="Path 13982" d="M388.681,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-307.849 -93.499)" fill="#fafafa"/>
<path id="Path_13983" data-name="Path 13983" d="M400.061,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-316.047 -93.499)" fill="#fafafa"/>
<path id="Path_13984" data-name="Path 13984" d="M411.442,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-324.246 -93.499)" fill="#fafafa"/>
<path id="Path_13985" data-name="Path 13985" d="M422.821,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-332.444 -93.499)" fill="#fafafa"/>
<path id="Path_13986" data-name="Path 13986" d="M106.306,83.743l1.573-.7H120.2L123,89V90.57Z" transform="translate(-106.306 -83.043)" fill="#e0e0e0"/>
<rect id="Rectangle_17525" data-name="Rectangle 17525" width="1.229" height="49.47" transform="translate(9.557 5.231)" fill="#e0e0e0"/>
<path id="Path_13987" data-name="Path 13987" d="M123.3,92.514H109.694l-3.123-6.829h13.6Z" transform="translate(-106.497 -84.887)" fill="#f0f0f0"/>
<path id="Path_13988" data-name="Path 13988" d="M114.558,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-110.36 -86.228)" fill="#fafafa"/>
<path id="Path_13989" data-name="Path 13989" d="M125.939,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-118.559 -86.228)" fill="#fafafa"/>
<path id="Path_13990" data-name="Path 13990" d="M137.318,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-126.756 -86.228)" fill="#fafafa"/>
<path id="Path_13991" data-name="Path 13991" d="M148.7,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-134.955 -86.228)" fill="#fafafa"/>
<path id="Path_13992" data-name="Path 13992" d="M119.681,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-114.051 -93.499)" fill="#fafafa"/>
<path id="Path_13993" data-name="Path 13993" d="M131.061,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-122.249 -93.499)" fill="#fafafa"/>
<path id="Path_13994" data-name="Path 13994" d="M142.441,99.278c.321.7.022,1.271-.667,1.271a2.248,2.248,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-130.448 -93.499)" fill="#fafafa"/>
<path id="Path_13995" data-name="Path 13995" d="M153.822,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-138.647 -93.499)" fill="#fafafa"/>
<path id="Path_13996" data-name="Path 13996" d="M227.482,166.051H170.545v6.925h-7.227V180.2h-7.012v6.925h-7.288v22.882h78.464Z" transform="translate(-137.078 -141.056)" fill="#e0e0e0"/>
<rect id="Rectangle_17526" data-name="Rectangle 17526" width="48.83" height="6.254" transform="translate(33.467 25.666)" fill="#ebebeb"/>
<rect id="Rectangle_17527" data-name="Rectangle 17527" width="48.872" height="6.457" transform="translate(26.24 32.689)" fill="#ebebeb"/>
<rect id="Rectangle_17528" data-name="Rectangle 17528" width="48.849" height="6.358" transform="translate(19.229 39.712)" fill="#ebebeb"/>
<rect id="Rectangle_17529" data-name="Rectangle 17529" width="48.83" height="6.254" transform="translate(11.941 46.823)" fill="#ebebeb"/>
</g>
</g>
<g id="Group_8803" data-name="Group 8803" transform="translate(-14 -17.831)">
<g id="Group_8803" data-name="Group 8803" transform="translate(3.335 51.686)">
<g id="Group_8904" data-name="Group 8904">
<g id="Group_8801" data-name="Group 8801" transform="translate(17.645 78.597)" style="isolation: isolate">
<g id="Group_8801" data-name="Group 8801" style="isolation: isolate">
<g id="Group_8800" data-name="Group 8800">
<g id="Group_8799" data-name="Group 8799" clip-path="url(#clip-path)">
<path id="Path_13998" data-name="Path 13998" d="M118.1,281.077H67.812l1.112-19.237,44.482-.792Z" transform="translate(-63.115 -261.048)" fill="#126055"/>
<path id="Path_13998" data-name="Path 13998" d="M118.1,281.077H67.812l1.112-19.237,44.482-.792Z" transform="translate(-63.115 -261.048)" fill="#934537"/>
</g>
</g>
</g>
</g>
</g>
<path id="Path_13999" data-name="Path 13999" d="M101.091,261.048l-44.6,1.146-7.765,18.883h47.67Z" transform="translate(-47.216 -200.282)" fill="#407bff"/>
<g id="Group_8811" data-name="Group 8811" transform="translate(-14 -17.831)">
<path id="Path_13999" data-name="Path 13999" d="M101.091,261.048l-44.6,1.146-7.765,18.883H96.4Z" transform="translate(-47.526 -209.362)" fill="#407bff"/>
<g id="Group_8811" data-name="Group 8811" transform="translate(0 51.686)">
<g id="Group_8905" data-name="Group 8905">
<g id="Group_8806" data-name="Group 8806" transform="translate(14.31 78.597)" style="isolation: isolate">
<g id="Group_8806" data-name="Group 8806" style="isolation: isolate">
<g id="Group_8805" data-name="Group 8805">
<g id="Group_8804" data-name="Group 8804" clip-path="url(#clip-path-2)">
<path id="Path_14000" data-name="Path 14000" d="M98.713,261.048l-44.552.705L46.1,281.076H94.22Z" transform="translate(-45.148 -261.048)" fill="#2bb8a6"/>
<path id="Path_14000" data-name="Path 14000" d="M98.713,261.048l-44.552.7L46.1,281.076H94.22Z" transform="translate(-45.148 -261.048)" fill="#eb9b8c"/>
</g>
</g>
</g>
<g id="Group_8809" data-name="Group 8809" transform="translate(70.795 78.597)" style="isolation: isolate">
<g id="Group_8809" data-name="Group 8809" transform="translate(56.485)" style="isolation: isolate">
<g id="Group_8808" data-name="Group 8808">
<g id="Group_8807" data-name="Group 8807" clip-path="url(#clip-path)">
<path id="Path_14001" data-name="Path 14001" d="M308.221,281.077h-50.29l-4.7-20.029h50.29Z" transform="translate(-253.235 -261.048)" fill="#126055"/>
@ -117,121 +117,121 @@
</g>
</g>
</g>
<path id="Path_14002" data-name="Path 14002" d="M291.211,261.048h-50.29l-4.7,20.029h50.29Z" transform="translate(-184.185 -200.282)" fill="#407bff"/>
<g id="Group_8816" data-name="Group 8816" transform="translate(-14 -17.831)">
<path id="Path_14002" data-name="Path 14002" d="M291.211,261.048h-50.29l-4.7,20.029h50.29Z" transform="translate(-184.495 -209.362)" fill="#407bff"/>
<g id="Group_8816" data-name="Group 8816" transform="translate(51.729 51.686)">
<g id="Group_8906" data-name="Group 8906">
<g id="Group_8814" data-name="Group 8814" transform="translate(66.039 78.597)" style="isolation: isolate">
<g id="Group_8814" data-name="Group 8814" style="isolation: isolate">
<g id="Group_8813" data-name="Group 8813">
<g id="Group_8812" data-name="Group 8812" clip-path="url(#clip-path)">
<path id="Path_14003" data-name="Path 14003" d="M291.211,261.048h-50.29l-4.7,20.029h50.29Z" transform="translate(-236.224 -261.048)" fill="#2bb8a6"/>
<path id="Path_14003" data-name="Path 14003" d="M291.211,261.048h-50.29l-4.7,20.029h50.29Z" transform="translate(-236.224 -261.048)" fill="#eb9b8c"/>
</g>
</g>
</g>
</g>
</g>
<g id="Group_8865" data-name="Group 8865" transform="translate(-14 -17.831)">
<g id="Group_8901" data-name="Group 8901">
<path id="Path_14006" data-name="Path 14006" d="M233.648,116.585a3.128,3.128,0,0,0-3.22-1.913c-2.516.25-4.939,3.663-7.222,2.961s-2-2.249-2-2.249-.839,2.227,2,4.095,6.7-2.849,9.921-1.444Z" transform="translate(-159.279 -80.134)" fill="#2e353a"/>
<path id="Path_14007" data-name="Path 14007" d="M240.7,114.478a4.2,4.2,0,0,0-3.5-2.829c-2.691-.226-4.263,3.437-6.325,2.829" transform="translate(-166.331 -78.027)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.48"/>
<path id="Path_14008" data-name="Path 14008" d="M267.912,122.383s.956-4.252-2.358-5.11-4.805,1.234-5.364,3.55.851,5.538,3.85,5.006,3.751-2.438,3.871-3.446" transform="translate(-187.365 -81.827)" fill="#2e353a"/>
<path id="Path_14009" data-name="Path 14009" d="M288.639,115.829c2.724-1.365,6.3-4.351,6.235-5.439s-2.813-8.4-2.813-8.4a2.068,2.068,0,0,1-.631-.323c-.27-.218-.607-2.908-.2-3.054a11.433,11.433,0,0,1,2.093-.364c.337,0,.2,2.4.067,2.981,0,0,4.357,6.539,4.069,9.668s-7.04,8.572-9.4,9.341.585-4.41.585-4.41" transform="translate(-206.865 -68.668)" fill="#e4897b"/>
<path id="Path_14010" data-name="Path 14010" d="M186.8,270.838l.772-1.769,2.415.868,2.214.8-.6,2.261-2.542-1.142Z" transform="translate(-134.582 -188.057)" fill="#e4897b"/>
<path id="Path_14011" data-name="Path 14011" d="M177.621,264.516c.179.1-1.009,2.421-1.009,2.421a7.677,7.677,0,0,0-2.974,2.043c-.938,1.274-1.387.07-.688-1.531l1.728-3.96c.5-1.137,1.086.029,2.943,1.027" transform="translate(-124.355 -183.83)" fill="#2e353a"/>
<path id="Path_14012" data-name="Path 14012" d="M183.027,277.67a.233.233,0,0,1-.049-.005.242.242,0,0,1-.212-.178c-.078-.333.615-.966.755-1.089a.063.063,0,0,1,.027-.014h0s.008,0,.013,0a.076.076,0,0,1,.038.013h0s0,0,0,0h0l0,0h0a1.566,1.566,0,0,1,.434.873.417.417,0,0,1-.143.306c-.1.085-.181.106-.256.063-.114-.066-.157-.3-.168-.54a1.1,1.1,0,0,1-.289.51.261.261,0,0,1-.157.057m.435-1.034c-.293.283-.607.661-.57.817,0,.014.013.055.111.076a.132.132,0,0,0,.108-.029,1.8,1.8,0,0,0,.352-.863m.15-.021c-.03.419-.006.849.091.906.03.018.083-.023.112-.048a.277.277,0,0,0,.1-.2,1.2,1.2,0,0,0-.3-.654" transform="translate(-131.667 -193.169)" fill="#407bff"/>
<g id="Group_8845" data-name="Group 8845" transform="translate(54.432 81.856)" opacity="0.2" style="isolation: isolate">
<g id="Group_8865" data-name="Group 8865" transform="translate(33.944)">
<g id="Group_8901" data-name="Group 8901" transform="translate(0)">
<path id="Path_14006" data-name="Path 14006" d="M233.648,116.585a3.128,3.128,0,0,0-3.22-1.913c-2.516.25-4.939,3.663-7.222,2.961s-2-2.249-2-2.249-.839,2.227,2,4.1,6.7-2.849,9.921-1.444Z" transform="translate(-207.533 -107.045)" fill="#2e353a"/>
<path id="Path_14007" data-name="Path 14007" d="M240.7,114.478a4.2,4.2,0,0,0-3.5-2.829c-2.691-.226-4.263,3.437-6.325,2.829" transform="translate(-214.585 -104.938)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.48"/>
<path id="Path_14008" data-name="Path 14008" d="M267.912,122.383s.956-4.252-2.358-5.11-4.8,1.234-5.364,3.55.851,5.538,3.85,5.006,3.751-2.438,3.871-3.446" transform="translate(-235.619 -108.738)" fill="#2e353a"/>
<path id="Path_14009" data-name="Path 14009" d="M288.639,115.829c2.724-1.365,6.3-4.351,6.235-5.439s-2.813-8.4-2.813-8.4a2.068,2.068,0,0,1-.631-.323c-.27-.218-.607-2.908-.2-3.054a11.433,11.433,0,0,1,2.093-.364c.337,0,.2,2.4.067,2.981,0,0,4.357,6.539,4.069,9.668s-7.04,8.572-9.4,9.341.585-4.41.585-4.41" transform="translate(-255.119 -95.579)" fill="#e4897b"/>
<path id="Path_14010" data-name="Path 14010" d="M186.8,270.838l.772-1.769,2.415.868,2.214.8L191.6,273l-2.542-1.142Z" transform="translate(-182.836 -214.968)" fill="#e4897b"/>
<path id="Path_14011" data-name="Path 14011" d="M177.621,264.516c.179.1-1.009,2.421-1.009,2.421a7.677,7.677,0,0,0-2.974,2.043c-.938,1.274-1.387.07-.688-1.531l1.728-3.96c.5-1.137,1.086.029,2.943,1.027" transform="translate(-172.609 -210.741)" fill="#2e353a"/>
<path id="Path_14012" data-name="Path 14012" d="M183.027,277.67a.232.232,0,0,1-.049-.005.242.242,0,0,1-.212-.178c-.078-.333.615-.966.755-1.089a.063.063,0,0,1,.027-.014h.013a.076.076,0,0,1,.038.013h0a1.566,1.566,0,0,1,.434.873.417.417,0,0,1-.143.306c-.1.085-.181.106-.256.063-.114-.066-.157-.3-.168-.54a1.1,1.1,0,0,1-.289.51.261.261,0,0,1-.157.057m.435-1.034c-.293.283-.607.661-.57.817,0,.014.013.055.111.076a.132.132,0,0,0,.108-.029,1.8,1.8,0,0,0,.352-.863m.15-.021c-.03.419-.006.849.091.906.03.018.083-.023.112-.048a.277.277,0,0,0,.1-.2,1.2,1.2,0,0,0-.3-.654" transform="translate(-179.921 -220.08)" fill="#407bff"/>
<g id="Group_8845" data-name="Group 8845" transform="translate(6.178 54.945)" opacity="0.2" style="isolation: isolate">
<g id="Group_8844" data-name="Group 8844">
<g id="Group_8843" data-name="Group 8843" clip-path="url(#clip-path-5)">
<path id="Path_14013" data-name="Path 14013" d="M194.7,273.79l.934-1.916,2.236.811-.588,2.267Z" transform="translate(-194.704 -271.874)"/>
</g>
</g>
</g>
<path id="Path_14014" data-name="Path 14014" d="M223.861,235.868c-1.012,4.721-5.537,20.832-12.57,20.228s-12.2-4.774-12.345-6.678.4-2.95,2.159-2.954,6.907,1.7,9.153,1.524,4.342-10.438,4.342-10.438Z" transform="translate(-143.313 -164.853)" fill="#407bff"/>
<g id="Group_8848" data-name="Group 8848" transform="translate(55.612 71.015)" style="isolation: isolate">
<path id="Path_14014" data-name="Path 14014" d="M223.861,235.868c-1.012,4.721-5.537,20.832-12.57,20.228s-12.2-4.774-12.345-6.678.4-2.95,2.159-2.954,6.907,1.7,9.153,1.524S214.6,237.55,214.6,237.55Z" transform="translate(-191.567 -191.764)" fill="#407bff"/>
<g id="Group_8848" data-name="Group 8848" transform="translate(7.358 44.104)" style="isolation: isolate">
<g id="Group_8847" data-name="Group 8847">
<g id="Group_8846" data-name="Group 8846" clip-path="url(#clip-path-6)">
<path id="Path_14015" data-name="Path 14015" d="M223.861,235.868c-1.012,4.721-5.537,20.832-12.57,20.228s-12.2-4.774-12.345-6.678.4-2.95,2.159-2.954,6.907,1.7,9.153,1.524,4.342-10.438,4.342-10.438Z" transform="translate(-198.925 -235.868)" fill="#157e8c"/>
<path id="Path_14015" data-name="Path 14015" d="M223.861,235.868c-1.012,4.721-5.537,20.832-12.57,20.228s-12.2-4.774-12.345-6.678.4-2.95,2.159-2.954,6.907,1.7,9.153,1.524S214.6,237.55,214.6,237.55Z" transform="translate(-198.925 -235.868)" fill="#434b40"/>
</g>
</g>
</g>
<path id="Path_14016" data-name="Path 14016" d="M341.771,336.388l-1.666.776-1.276-2.372-1.168-2.178,1.839-1.267,1.2,2.668Z" transform="translate(-243.263 -231.585)" fill="#e4897b"/>
<path id="Path_14017" data-name="Path 14017" d="M344.957,348.294c-.075-.2,2.244-1.1,2.244-1.1a7.267,7.267,0,0,0,3.485.589c1.486-.286,1.082.937-.425,1.639l-3.729,1.736c-1.071.5-.8-.8-1.575-2.868" transform="translate(-248.519 -242.663)" fill="#2e353a"/>
<path id="Path_14018" data-name="Path 14018" d="M354.247,345.2a1.5,1.5,0,0,0-.169.026h-.038a.2.2,0,0,1-.058-.034v-.022a.028.028,0,0,0-.006-.02s.006-.011.006-.016h0c0-.009.013-.019.013-.029a1.661,1.661,0,0,1,.221-.963.365.365,0,0,1,.3-.127c.124,0,.2.05.233.135.044.131-.064.334-.2.524a.948.948,0,0,1,.531-.176.258.258,0,0,1,.187.108.3.3,0,0,1,.049.3c-.119.248-.739.3-1.065.3m.784-.567a1.708,1.708,0,0,0-.763.4c.393,0,.861-.062.929-.206.006-.013.024-.051-.037-.135a.135.135,0,0,0-.1-.055l-.03,0m-.525-.611c-.074,0-.135.092-.186.149a1.327,1.327,0,0,0-.177.735c.279-.292.526-.68.488-.792a.172.172,0,0,0-.113-.092Z" transform="translate(-255.017 -240.437)" fill="#407bff"/>
<g id="Group_8851" data-name="Group 8851" transform="translate(94.406 99.775)" opacity="0.2" style="isolation: isolate">
<path id="Path_14016" data-name="Path 14016" d="M341.771,336.388l-1.666.776-1.276-2.372-1.168-2.178,1.839-1.267,1.2,2.668Z" transform="translate(-291.517 -258.496)" fill="#e4897b"/>
<path id="Path_14017" data-name="Path 14017" d="M344.957,348.294c-.075-.2,2.244-1.1,2.244-1.1a7.267,7.267,0,0,0,3.485.589c1.486-.286,1.082.937-.425,1.639l-3.729,1.736c-1.071.5-.8-.8-1.575-2.868" transform="translate(-296.773 -269.574)" fill="#2e353a"/>
<path id="Path_14018" data-name="Path 14018" d="M354.247,345.2a1.492,1.492,0,0,0-.169.026h-.038a.2.2,0,0,1-.058-.034v-.022a.029.029,0,0,0-.006-.02.051.051,0,0,0,.006-.016h0c0-.009.013-.019.013-.029a1.661,1.661,0,0,1,.221-.963.365.365,0,0,1,.3-.127.224.224,0,0,1,.233.135c.044.131-.064.334-.2.524a.948.948,0,0,1,.531-.176.258.258,0,0,1,.187.108.3.3,0,0,1,.049.3c-.119.248-.739.3-1.065.3m.784-.567a1.708,1.708,0,0,0-.763.4c.393,0,.861-.062.929-.206.006-.013.024-.051-.037-.135a.135.135,0,0,0-.1-.055h-.03m-.525-.611c-.074,0-.135.092-.186.149a1.327,1.327,0,0,0-.177.735c.279-.292.526-.68.488-.792a.172.172,0,0,0-.113-.092Z" transform="translate(-303.271 -267.348)" fill="#407bff"/>
<g id="Group_8851" data-name="Group 8851" transform="translate(46.152 72.864)" opacity="0.2" style="isolation: isolate">
<g id="Group_8850" data-name="Group 8850">
<g id="Group_8849" data-name="Group 8849" clip-path="url(#clip-path-7)">
<path id="Path_14019" data-name="Path 14019" d="M340.75,334.1l-1.878.77-1.178-2.2,1.834-1.28Z" transform="translate(-337.695 -331.388)"/>
</g>
</g>
</g>
<path id="Path_14020" data-name="Path 14020" d="M249.431,204.77s-3.9,6.256-3.1,10.916c.942,5.5,13.25,11.694,16.6,14.431s4.927,13.073,9.1,15.056l2.274-.878a5.739,5.739,0,0,0,.292-4.65c-3.631-12.285-6.636-18.156-16.666-25.512a62.225,62.225,0,0,0,.383-8.972Z" transform="translate(-177.386 -143.118)" fill="#407bff"/>
<g id="Group_8854" data-name="Group 8854" transform="translate(68.833 61.652)" style="isolation: isolate">
<path id="Path_14020" data-name="Path 14020" d="M249.431,204.77s-3.9,6.256-3.1,10.916c.942,5.5,13.25,11.694,16.6,14.431s4.927,13.073,9.1,15.056l2.274-.878a5.739,5.739,0,0,0,.292-4.65c-3.631-12.285-6.636-18.156-16.666-25.512a62.226,62.226,0,0,0,.383-8.972Z" transform="translate(-225.64 -170.029)" fill="#407bff"/>
<g id="Group_8854" data-name="Group 8854" transform="translate(20.579 34.741)" style="isolation: isolate">
<g id="Group_8853" data-name="Group 8853">
<g id="Group_8852" data-name="Group 8852" clip-path="url(#clip-path-8)">
<path id="Path_14021" data-name="Path 14021" d="M249.431,204.77s-3.9,6.256-3.1,10.916c.942,5.5,13.25,11.694,16.6,14.431s4.927,13.073,9.1,15.056l2.274-.878a5.739,5.739,0,0,0,.292-4.65c-3.631-12.285-6.636-18.156-16.666-25.512a62.225,62.225,0,0,0,.383-8.972Z" transform="translate(-246.219 -204.77)" fill="#1d92aa"/>
<path id="Path_14021" data-name="Path 14021" d="M249.431,204.77s-3.9,6.256-3.1,10.916c.942,5.5,13.25,11.694,16.6,14.431s4.927,13.073,9.1,15.056l2.274-.878a5.739,5.739,0,0,0,.292-4.65c-3.631-12.285-6.636-18.156-16.666-25.512a62.226,62.226,0,0,0,.383-8.972Z" transform="translate(-246.219 -204.77)" fill="#31392d"/>
</g>
</g>
</g>
<path id="Path_14022" data-name="Path 14022" d="M278.512,244.82l-.559.217c-1.269-1.74-2.306-4.878-3.394-8.171-1.155-3.49-2.348-7.1-3.754-8.53a57.1,57.1,0,0,0-5.661-4.384c-5.13-3.712-10.948-7.918-11.336-10.484-.411-2.728.883-6.612,1.658-8.611l.6.027c-.735,1.876-2.105,5.844-1.7,8.488.349,2.306,6.559,6.8,11.093,10.08a57.033,57.033,0,0,1,5.737,4.447c1.5,1.532,2.664,5.043,3.894,8.764,1.062,3.213,2.158,6.527,3.427,8.156" transform="translate(-182.796 -143.179)" fill="#126055"/>
<g id="Group_8857" data-name="Group 8857" transform="translate(75.901 63.521)" opacity="0.1" style="isolation: isolate">
<path id="Path_14022" data-name="Path 14022" d="M278.512,244.82l-.559.217c-1.269-1.74-2.306-4.878-3.394-8.171-1.155-3.49-2.348-7.1-3.754-8.53a57.1,57.1,0,0,0-5.661-4.384c-5.13-3.712-10.948-7.918-11.336-10.484-.411-2.728.883-6.612,1.658-8.611l.6.027c-.735,1.876-2.1,5.844-1.7,8.488.349,2.306,6.559,6.8,11.093,10.08A57.026,57.026,0,0,1,271.2,227.9c1.5,1.532,2.664,5.043,3.894,8.764,1.062,3.213,2.158,6.527,3.427,8.156" transform="translate(-231.05 -170.09)" fill="#ff8f1f"/>
<g id="Group_8857" data-name="Group 8857" transform="translate(27.647 36.61)" opacity="0.1" style="isolation: isolate">
<g id="Group_8856" data-name="Group 8856">
<g id="Group_8855" data-name="Group 8855" clip-path="url(#clip-path-9)">
<path id="Path_14023" data-name="Path 14023" d="M276.146,218.472s-2.06-1.451-4.646-3.258l3.777,1.629a17.714,17.714,0,0,0,1.317-5.865c.034,3.146-.447,7.494-.447,7.494" transform="translate(-271.5 -210.978)"/>
<path id="Path_14023" data-name="Path 14023" d="M276.146,218.472s-2.06-1.451-4.646-3.258l3.777,1.629a17.715,17.715,0,0,0,1.317-5.865c.034,3.146-.447,7.494-.447,7.494" transform="translate(-271.5 -210.978)"/>
</g>
</g>
</g>
<path id="Path_14024" data-name="Path 14024" d="M254.676,166.173l8.951.987a85.559,85.559,0,0,0,2.188-16.281,16.509,16.509,0,0,1-6.508.8,16.257,16.257,0,0,1-5.807-2.133,110.806,110.806,0,0,1,1.176,16.627" transform="translate(-182.631 -104.521)" fill="#2e353a"/>
<path id="Path_14025" data-name="Path 14025" d="M270.6,150.361a4.087,4.087,0,0,1-2.663-1.682c1.54-1.207.685-3.784.685-3.784l2.545.882a8.849,8.849,0,0,0-.242,1.168c-.222,1.7.492,1.816.492,1.816.348.986-.816,1.6-.816,1.6" transform="translate(-193.029 -101.27)" fill="#e4897b"/>
<g id="Group_8860" data-name="Group 8860" transform="translate(75.589 43.625)" opacity="0.2" style="isolation: isolate">
<path id="Path_14024" data-name="Path 14024" d="M254.676,166.173l8.951.987a85.558,85.558,0,0,0,2.188-16.281,16.509,16.509,0,0,1-6.508.8,16.257,16.257,0,0,1-5.807-2.133,110.808,110.808,0,0,1,1.176,16.627" transform="translate(-230.885 -131.432)" fill="#2e353a"/>
<path id="Path_14025" data-name="Path 14025" d="M270.6,150.361a4.087,4.087,0,0,1-2.663-1.682c1.54-1.207.685-3.784.685-3.784l2.545.882a8.848,8.848,0,0,0-.242,1.168c-.222,1.7.492,1.816.492,1.816.348.986-.816,1.6-.816,1.6" transform="translate(-241.283 -128.181)" fill="#e4897b"/>
<g id="Group_8860" data-name="Group 8860" transform="translate(27.335 16.714)" opacity="0.2" style="isolation: isolate">
<g id="Group_8859" data-name="Group 8859">
<g id="Group_8858" data-name="Group 8858" clip-path="url(#clip-path-10)">
<path id="Path_14026" data-name="Path 14026" d="M272.928,145.777a8.851,8.851,0,0,0-.242,1.168,3.024,3.024,0,0,1-2.3-2.05Z" transform="translate(-270.383 -144.895)"/>
<path id="Path_14026" data-name="Path 14026" d="M272.928,145.777a8.848,8.848,0,0,0-.242,1.168,3.024,3.024,0,0,1-2.3-2.05Z" transform="translate(-270.383 -144.895)"/>
</g>
</g>
</g>
<path id="Path_14027" data-name="Path 14027" d="M269.361,121.076c2.282.178,2.928,1.551,2.925,4.1,0,3.181-.806,5.379-3.614,4.481-3.813-1.22-3.1-8.872.689-8.577" transform="translate(-191.738 -84.616)" fill="#e4897b"/>
<path id="Path_14028" data-name="Path 14028" d="M282.814,133.863a5.312,5.312,0,0,0,.6,1.071.61.61,0,0,1-.62.231Z" transform="translate(-203.732 -93.559)" fill="#de5753"/>
<path id="Path_14029" data-name="Path 14029" d="M276.76,131.956c-.009.2-.118.361-.243.354s-.219-.176-.21-.378.118-.361.243-.354.219.176.21.378" transform="translate(-199.062 -91.962)" fill="#2e353a"/>
<path id="Path_14030" data-name="Path 14030" d="M276.99,131.251l.416-.151s-.22.359-.416.151" transform="translate(-199.554 -91.628)" fill="#2e353a"/>
<path id="Path_14031" data-name="Path 14031" d="M285.117,132.224c-.009.2-.118.361-.243.354s-.219-.176-.21-.378.118-.361.243-.354.219.176.21.378" transform="translate(-205.082 -92.15)" fill="#2e353a"/>
<path id="Path_14032" data-name="Path 14032" d="M285.346,131.52l.416-.151s-.22.359-.416.151" transform="translate(-205.574 -91.816)" fill="#2e353a"/>
<path id="Path_14033" data-name="Path 14033" d="M275.641,127.141a1.127,1.127,0,0,0-1.015.294" transform="translate(-197.851 -88.846)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.696"/>
<path id="Path_14034" data-name="Path 14034" d="M284.213,127.23a1.009,1.009,0,0,1,.9.273" transform="translate(-204.758 -88.909)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.696"/>
<path id="Path_14035" data-name="Path 14035" d="M277.4,139.972a6.506,6.506,0,0,0-.323.833c-.049-.008-.1-.016-.146-.026-.659-.124-.927-.416-1.024-.7a1,1,0,0,1-.037-.438.959.959,0,0,1,.059-.244,3.027,3.027,0,0,0,1.247.532c.137.033.224.046.224.046" transform="translate(-198.74 -97.425)" fill="#2e353a"/>
<path id="Path_14036" data-name="Path 14036" d="M277.2,139.926l-.1.243a1.926,1.926,0,0,1-1.2-.531.952.952,0,0,1,.059-.244,3.026,3.026,0,0,0,1.247.532" transform="translate(-198.765 -97.425)" fill="#fff"/>
<path id="Path_14037" data-name="Path 14037" d="M277.048,142.361c-.659-.124-.927-.416-1.024-.7a2.066,2.066,0,0,1,.707.294.86.86,0,0,1,.317.409" transform="translate(-198.858 -99.008)" fill="#de5753"/>
<path id="Path_14038" data-name="Path 14038" d="M265.157,122.691a7.738,7.738,0,0,0,1.146-3.507s4.656-1.637,4.547,3.323c0,0,.737-4.355-3.179-4.758s-4.315,5.778-2.413,7.778a3.252,3.252,0,0,1-.1-2.835" transform="translate(-190.307 -82.283)" fill="#2e353a"/>
<path id="Path_14039" data-name="Path 14039" d="M264.724,133.543a1.048,1.048,0,0,0-1.011-1.069c-.713.028-1.155,1.565.579,2.078.249.074.409-.181.432-1.009" transform="translate(-189.536 -92.588)" fill="#e4897b"/>
<path id="Path_14040" data-name="Path 14040" d="M237.873,107.488a8.912,8.912,0,0,1,.736,6.06s-6.188-7.417-6.747-9.109,3.469-11.327,3.469-11.327a9.2,9.2,0,0,1-.533-2.484c.14-.452,1.887-1.505,2.306-1.2s.28,3.613.07,4.065l-.21.452s-2.154,8.725-1.881,9.368,2.789,4.18,2.789,4.18" transform="translate(-167.005 -62.462)" fill="#e4897b"/>
<path id="Path_14041" data-name="Path 14041" d="M267.432,119.779s-2.449,3.95-5.7,3.317c0,0-.159-2.991,2.016-3.648a4.62,4.62,0,0,1,3.683.33" transform="translate(-188.561 -83.327)" fill="#2e353a"/>
<path id="Path_14042" data-name="Path 14042" d="M276.032,121.068s1.02,1.65-1.759,2.741" transform="translate(-197.597 -84.617)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.48"/>
<path id="Path_14043" data-name="Path 14043" d="M284.369,119.5s1.17,1.158,1.656-.5" transform="translate(-204.87 -83.169)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.48"/>
<path id="Path_14044" data-name="Path 14044" d="M266.271,166.48l.253-.464s-.312-.1-.854-.235c.227-1.683.93-8.052-.785-12.184l-.318.263a8.484,8.484,0,0,1,.874,3.876l-5.924-.038s-.68-3.575-1.522-4.673l-.212.107a28.5,28.5,0,0,1,1.248,12.016,16.047,16.047,0,0,0-2.78.416l.226.452a32.211,32.211,0,0,1,5.022-.216l3.113.306a15.805,15.805,0,0,1,1.66.374" transform="translate(-184.612 -106.953)" fill="#407bff"/>
<g id="Group_8863" data-name="Group 8863" transform="translate(71.638 46.074)" style="isolation: isolate">
<path id="Path_14027" data-name="Path 14027" d="M269.361,121.076c2.282.178,2.928,1.551,2.925,4.1,0,3.181-.806,5.379-3.614,4.481-3.813-1.22-3.1-8.872.689-8.577" transform="translate(-239.992 -111.527)" fill="#e4897b"/>
<path id="Path_14028" data-name="Path 14028" d="M282.814,133.863a5.311,5.311,0,0,0,.6,1.071.61.61,0,0,1-.62.231Z" transform="translate(-251.986 -120.47)" fill="#de5753"/>
<path id="Path_14029" data-name="Path 14029" d="M276.76,131.956c-.009.2-.118.361-.243.354s-.219-.176-.21-.378.118-.361.243-.354.219.176.21.378" transform="translate(-247.316 -118.873)" fill="#2e353a"/>
<path id="Path_14030" data-name="Path 14030" d="M276.99,131.251l.416-.151s-.22.359-.416.151" transform="translate(-247.808 -118.539)" fill="#2e353a"/>
<path id="Path_14031" data-name="Path 14031" d="M285.117,132.224c-.009.2-.118.361-.243.354s-.219-.176-.21-.378.118-.361.243-.354.219.176.21.378" transform="translate(-253.336 -119.061)" fill="#2e353a"/>
<path id="Path_14032" data-name="Path 14032" d="M285.346,131.52l.416-.151s-.22.359-.416.151" transform="translate(-253.828 -118.727)" fill="#2e353a"/>
<path id="Path_14033" data-name="Path 14033" d="M275.641,127.141a1.127,1.127,0,0,0-1.015.294" transform="translate(-246.105 -115.757)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.696"/>
<path id="Path_14034" data-name="Path 14034" d="M284.213,127.23a1.009,1.009,0,0,1,.9.273" transform="translate(-253.012 -115.82)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.696"/>
<path id="Path_14035" data-name="Path 14035" d="M277.4,139.972a6.5,6.5,0,0,0-.323.833c-.049-.008-.1-.016-.146-.026-.659-.124-.927-.416-1.024-.7a1,1,0,0,1-.037-.438.961.961,0,0,1,.059-.244,3.027,3.027,0,0,0,1.247.532c.137.033.224.046.224.046" transform="translate(-246.994 -124.336)" fill="#2e353a"/>
<path id="Path_14036" data-name="Path 14036" d="M277.2,139.926l-.1.243a1.926,1.926,0,0,1-1.2-.531.956.956,0,0,1,.059-.244,3.026,3.026,0,0,0,1.247.532" transform="translate(-247.019 -124.336)" fill="#fff"/>
<path id="Path_14037" data-name="Path 14037" d="M277.048,142.361c-.659-.124-.927-.416-1.024-.7a2.066,2.066,0,0,1,.707.294.86.86,0,0,1,.317.409" transform="translate(-247.112 -125.919)" fill="#de5753"/>
<path id="Path_14038" data-name="Path 14038" d="M265.157,122.691a7.737,7.737,0,0,0,1.146-3.507s4.656-1.637,4.547,3.323c0,0,.737-4.355-3.179-4.758s-4.315,5.778-2.413,7.778a3.252,3.252,0,0,1-.1-2.835" transform="translate(-238.561 -109.194)" fill="#2e353a"/>
<path id="Path_14039" data-name="Path 14039" d="M264.724,133.543a1.048,1.048,0,0,0-1.011-1.069c-.713.028-1.155,1.565.579,2.078.249.074.409-.181.432-1.009" transform="translate(-237.79 -119.499)" fill="#e4897b"/>
<path id="Path_14040" data-name="Path 14040" d="M237.873,107.488a8.912,8.912,0,0,1,.736,6.06s-6.188-7.417-6.747-9.109,3.469-11.327,3.469-11.327a9.2,9.2,0,0,1-.533-2.484c.14-.452,1.887-1.505,2.306-1.2s.28,3.613.07,4.065l-.21.452s-2.154,8.725-1.881,9.368,2.789,4.18,2.789,4.18" transform="translate(-215.259 -89.373)" fill="#e4897b"/>
<path id="Path_14041" data-name="Path 14041" d="M267.432,119.779s-2.449,3.95-5.7,3.317c0,0-.159-2.991,2.016-3.648a4.62,4.62,0,0,1,3.683.33" transform="translate(-236.815 -110.238)" fill="#2e353a"/>
<path id="Path_14042" data-name="Path 14042" d="M276.032,121.068s1.02,1.65-1.759,2.741" transform="translate(-245.851 -111.528)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.48"/>
<path id="Path_14043" data-name="Path 14043" d="M284.369,119.5s1.17,1.158,1.656-.5" transform="translate(-253.124 -110.08)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.48"/>
<path id="Path_14044" data-name="Path 14044" d="M266.271,166.48l.253-.464s-.312-.1-.854-.235c.227-1.683.93-8.052-.785-12.184l-.318.263a8.484,8.484,0,0,1,.874,3.876l-5.924-.038s-.68-3.575-1.522-4.673l-.212.107a28.5,28.5,0,0,1,1.248,12.016,16.046,16.046,0,0,0-2.78.416l.226.452a32.212,32.212,0,0,1,5.022-.216l3.113.306a15.8,15.8,0,0,1,1.66.374" transform="translate(-232.866 -133.864)" fill="#407bff"/>
<g id="Group_8863" data-name="Group 8863" transform="translate(23.384 19.163)" style="isolation: isolate">
<g id="Group_8862" data-name="Group 8862">
<g id="Group_8861" data-name="Group 8861" clip-path="url(#clip-path-11)">
<path id="Path_14045" data-name="Path 14045" d="M266.271,166.48l.253-.464s-.312-.1-.854-.235c.227-1.683.93-8.052-.785-12.184l-.318.263a8.484,8.484,0,0,1,.874,3.876l-5.924-.038s-.68-3.575-1.522-4.673l-.212.107a28.5,28.5,0,0,1,1.248,12.016,16.047,16.047,0,0,0-2.78.416l.226.452a32.211,32.211,0,0,1,5.022-.216l3.113.306a15.805,15.805,0,0,1,1.66.374" transform="translate(-256.25 -153.026)" fill="#fff"/>
<path id="Path_14045" data-name="Path 14045" d="M266.271,166.48l.253-.464s-.312-.1-.854-.235c.227-1.683.93-8.052-.785-12.184l-.318.263a8.484,8.484,0,0,1,.874,3.876l-5.924-.038s-.68-3.575-1.522-4.673l-.212.107a28.5,28.5,0,0,1,1.248,12.016,16.046,16.046,0,0,0-2.78.416l.226.452a32.212,32.212,0,0,1,5.022-.216l3.113.306a15.8,15.8,0,0,1,1.66.374" transform="translate(-256.25 -153.026)" fill="#fff"/>
</g>
</g>
</g>
<path id="Path_14046" data-name="Path 14046" d="M274.7,176.706a1.261,1.261,0,0,1-.229.816.864.864,0,0,1-.71.28.848.848,0,0,1-.685-.274,1.184,1.184,0,0,1-.232-.786v-.108h.582v.15a.471.471,0,0,0,.087.322.3.3,0,0,0,.232.093.308.308,0,0,0,.252-.108.675.675,0,0,0,.089-.409v-.771a.636.636,0,0,1-1.082.126,1.256,1.256,0,0,1-.171-.717v-.771a1.156,1.156,0,0,1,.24-.786,1.014,1.014,0,0,1,1.387,0,1.156,1.156,0,0,1,.24.786Zm-.934-1.024a.3.3,0,0,0,.232-.094.47.47,0,0,0,.087-.322v-.759a.459.459,0,0,0-.087-.319.343.343,0,0,0-.464,0,.459.459,0,0,0-.087.319v.759a.469.469,0,0,0,.087.322.3.3,0,0,0,.232.094" transform="translate(-196.557 -121.255)" fill="#125765"/>
<path id="Path_14047" data-name="Path 14047" d="M282.617,176.706a1.261,1.261,0,0,1-.229.816.864.864,0,0,1-.71.28.848.848,0,0,1-.685-.274,1.184,1.184,0,0,1-.232-.786v-.108h.582v.15a.471.471,0,0,0,.087.322.3.3,0,0,0,.232.093.308.308,0,0,0,.252-.108.674.674,0,0,0,.09-.409v-.771a.636.636,0,0,1-1.082.126,1.257,1.257,0,0,1-.171-.717v-.771a1.156,1.156,0,0,1,.24-.786,1.014,1.014,0,0,1,1.387,0,1.156,1.156,0,0,1,.24.786Zm-.934-1.024a.3.3,0,0,0,.232-.094.469.469,0,0,0,.087-.322v-.759a.459.459,0,0,0-.087-.319.343.343,0,0,0-.464,0,.459.459,0,0,0-.087.319v.759a.469.469,0,0,0,.087.322.3.3,0,0,0,.232.094" transform="translate(-202.263 -121.255)" fill="#125765"/>
<path id="Path_14046" data-name="Path 14046" d="M274.7,176.706a1.261,1.261,0,0,1-.229.816.864.864,0,0,1-.71.28.848.848,0,0,1-.685-.274,1.184,1.184,0,0,1-.232-.786v-.108h.582v.15a.471.471,0,0,0,.087.322.3.3,0,0,0,.232.093.308.308,0,0,0,.252-.108.675.675,0,0,0,.089-.409v-.771a.636.636,0,0,1-1.082.126,1.256,1.256,0,0,1-.171-.717v-.771a1.156,1.156,0,0,1,.24-.786,1.014,1.014,0,0,1,1.387,0,1.156,1.156,0,0,1,.24.786Zm-.934-1.024a.3.3,0,0,0,.232-.094.47.47,0,0,0,.087-.322v-.759a.459.459,0,0,0-.087-.319.343.343,0,0,0-.464,0,.459.459,0,0,0-.087.319v.759a.469.469,0,0,0,.087.322.3.3,0,0,0,.232.094" transform="translate(-244.811 -148.166)" fill="#ff8f1f"/>
<path id="Path_14047" data-name="Path 14047" d="M282.617,176.706a1.261,1.261,0,0,1-.229.816.864.864,0,0,1-.71.28.848.848,0,0,1-.685-.274,1.184,1.184,0,0,1-.232-.786v-.108h.582v.15a.471.471,0,0,0,.087.322.3.3,0,0,0,.232.093.308.308,0,0,0,.252-.108.674.674,0,0,0,.09-.409v-.771a.636.636,0,0,1-1.082.126,1.257,1.257,0,0,1-.171-.717v-.771a1.157,1.157,0,0,1,.24-.786,1.014,1.014,0,0,1,1.387,0,1.156,1.156,0,0,1,.24.786Zm-.934-1.024a.3.3,0,0,0,.232-.094.469.469,0,0,0,.087-.322v-.759a.459.459,0,0,0-.087-.319.343.343,0,0,0-.464,0,.459.459,0,0,0-.087.319v.759a.469.469,0,0,0,.087.322.3.3,0,0,0,.232.094" transform="translate(-250.517 -148.166)" fill="#ff8f1f"/>
</g>
</g>
<g id="Group_8873" data-name="Group 8873" transform="translate(-14 -17.831)">
<g id="Group_8873" data-name="Group 8873" transform="translate(13.926 23.143)">
<g id="Group_8907" data-name="Group 8907">
<path id="Path_14048" data-name="Path 14048" d="M335.17,173.594a35.718,35.718,0,0,0-24.292-.479c-3.483,1.135-7.173,2.571-10.74,3.962q-1.448.564-2.9,1.126c-.542.209-1.5.615-1.581,1.194l.877,2.27c1.8-.674,2.709-1.04,4.557-1.76,3.534-1.376,7.19-2.8,10.6-3.911a34.29,34.29,0,0,1,20.62-.271l.763-.527-.372-.7h1.026l-1.026-.9h2.469Z" transform="translate(-213.001 -119.689)" fill="#2bb8a6"/>
<path id="Path_14049" data-name="Path 14049" d="M295.981,198.514s4.729.235,6.243,1.154l.047-2.47s-.022-.151-.452-.161c-1.46-.032-4.659-.34-5.414-.763-1.717-.963.781-1.868.781-1.868s-1.578.532-1.535,1.176a10.421,10.421,0,0,1,.33,2.931" transform="translate(-212.998 -135.875)" fill="#407bff"/>
<g id="Group_8868" data-name="Group 8868" transform="translate(82.653 58.532)" style="isolation: isolate">
<path id="Path_14048" data-name="Path 14048" d="M335.17,173.594a35.718,35.718,0,0,0-24.292-.479c-3.483,1.135-7.173,2.571-10.74,3.962q-1.448.564-2.9,1.126c-.542.209-1.5.615-1.581,1.194l.877,2.27c1.8-.674,2.709-1.04,4.557-1.76,3.534-1.376,7.19-2.8,10.6-3.911a34.29,34.29,0,0,1,20.62-.271l.763-.527-.372-.7h1.026l-1.026-.9h2.469Z" transform="translate(-241.237 -169.743)" fill="#1fa269"/>
<path id="Path_14049" data-name="Path 14049" d="M295.981,198.514s4.729.235,6.243,1.154l.047-2.47s-.022-.151-.452-.161c-1.46-.032-4.659-.34-5.414-.763-1.717-.963.781-1.868.781-1.868s-1.578.532-1.535,1.176a10.421,10.421,0,0,1,.33,2.931" transform="translate(-241.234 -185.929)" fill="#407bff"/>
<g id="Group_8868" data-name="Group 8868" transform="translate(54.417 8.478)" style="isolation: isolate">
<g id="Group_8867" data-name="Group 8867">
<g id="Group_8866" data-name="Group 8866" clip-path="url(#clip-path-12)">
<path id="Path_14050" data-name="Path 14050" d="M295.981,198.514s4.729.235,6.243,1.154l.047-2.47s-.022-.151-.452-.161c-1.46-.032-4.659-.34-5.414-.763-1.717-.963.781-1.868.781-1.868s-1.578.532-1.535,1.176a10.421,10.421,0,0,1,.33,2.931" transform="translate(-295.651 -194.407)" fill="#126055"/>
<path id="Path_14050" data-name="Path 14050" d="M295.981,198.514s4.729.235,6.243,1.154l.047-2.47s-.022-.151-.452-.161c-1.46-.032-4.659-.34-5.414-.763-1.717-.963.781-1.868.781-1.868s-1.578.532-1.535,1.176a10.421,10.421,0,0,1,.33,2.931" transform="translate(-295.651 -194.407)" fill="#115d3c"/>
</g>
</g>
</g>
<g id="Group_8871" data-name="Group 8871" transform="translate(28.236 50.054)" style="isolation: isolate">
<g id="Group_8871" data-name="Group 8871" style="isolation: isolate">
<g id="Group_8870" data-name="Group 8870">
<g id="Group_8869" data-name="Group 8869" clip-path="url(#clip-path-13)">
<path id="Path_14051" data-name="Path 14051" d="M162.458,180.077a.486.486,0,0,1-.308.569,14.681,14.681,0,0,1-4.38.608c-6.352,0-14.316-3.1-22.642-6.347-3.534-1.376-7.19-2.8-10.6-3.911a34.288,34.288,0,0,0-20.62-.271l-.763-.527.372-.7H102.49l1.026-.9H101v0a35.8,35.8,0,0,1,24.316-.479c3.483,1.135,7.185,2.572,10.752,3.962,9.673,3.77,20.479,7,25.608,5.573.328-.092.3-.186.212-.237a.369.369,0,0,0-.136-.042c.248.015.294.12.3.216a21.119,21.119,0,0,0,.409,2.491" transform="translate(-101 -166.248)" fill="#2bb8a6"/>
<path id="Path_14051" data-name="Path 14051" d="M162.458,180.077a.486.486,0,0,1-.308.569,14.68,14.68,0,0,1-4.38.608c-6.352,0-14.316-3.1-22.642-6.347-3.534-1.376-7.19-2.8-10.6-3.911a34.288,34.288,0,0,0-20.62-.271l-.763-.527.372-.7H102.49l1.026-.9H101a35.8,35.8,0,0,1,24.316-.479c3.483,1.135,7.185,2.572,10.752,3.962,9.673,3.77,20.479,7,25.608,5.573.328-.092.3-.186.212-.237a.369.369,0,0,0-.136-.042c.248.015.294.12.3.216a21.114,21.114,0,0,0,.409,2.491" transform="translate(-101 -166.248)" fill="#1fa269"/>
</g>
</g>
</g>
@ -239,19 +239,19 @@
</g>
</g>
</g>
<path id="Path_13973" data-name="Path 13973" d="M-122.1,0,64.718-.222A14.962,14.962,0,0,1,79.68,14.741V72.595A14.962,14.962,0,0,1,64.718,87.557l-215.6.221Z" transform="translate(254 4.523)" fill="#125765"/>
<g id="Mask_Group_9" data-name="Mask Group 9" clip-path="url(#clip-path-14)">
<g id="Group_8909" data-name="Group 8909">
<g id="Group_8908" data-name="Group 8908" transform="translate(0 4.523)">
<g id="Group_8886" data-name="Group 8886" transform="matrix(0.309, -0.951, 0.951, 0.309, 84.633, 94.705)">
<g id="Group_8885" data-name="Group 8885" transform="translate(0)" clip-path="url(#clip-path-15)">
<rect id="Rectangle_17623" data-name="Rectangle 17623" width="111.63" height="15.948" transform="translate(0 0)" fill="#407bff"/>
<g id="Group_8879" data-name="Group 8879" transform="translate(0 0)">
<path id="Path_13973" data-name="Path 13973" d="M-122.1,0,64.718-.222A14.962,14.962,0,0,1,79.68,14.741V72.6A14.962,14.962,0,0,1,64.718,87.557l-215.6.221Z" transform="translate(253 0.222)" fill="#2d2f39" opacity="0.998"/>
<g id="Mask_Group_9" data-name="Mask Group 9" transform="translate(0 0.222)" clip-path="url(#clip-path-14)">
<g id="Group_8909" data-name="Group 8909" transform="translate(83.633 -11.455)">
<g id="Group_8908" data-name="Group 8908" transform="translate(0 0)">
<g id="Group_8886" data-name="Group 8886" transform="translate(0 106.16) rotate(-72)">
<g id="Group_8885" data-name="Group 8885" clip-path="url(#clip-path-15)">
<rect id="Rectangle_17623" data-name="Rectangle 17623" width="111.63" height="15.948" fill="#407bff"/>
<g id="Group_8879" data-name="Group 8879">
<g id="Group_8878" data-name="Group 8878" clip-path="url(#clip-path-16)">
<g id="Group_8877" data-name="Group 8877" transform="translate(0 0)" style="isolation: isolate">
<g id="Group_8876" data-name="Group 8876" transform="translate(0)">
<g id="Group_8877" data-name="Group 8877" style="isolation: isolate">
<g id="Group_8876" data-name="Group 8876">
<g id="Group_8875" data-name="Group 8875" clip-path="url(#clip-path-16)">
<rect id="Rectangle_17624" data-name="Rectangle 17624" width="111.63" height="15.894" transform="translate(0 0)" fill="#fff"/>
<rect id="Rectangle_17624" data-name="Rectangle 17624" width="111.63" height="15.894" fill="#fff"/>
</g>
</g>
</g>
@ -271,10 +271,10 @@
<rect id="Rectangle_17651" data-name="Rectangle 17651" width="7.973" height="7.973" transform="translate(87.71 0.001)" fill="#2e353a"/>
<rect id="Rectangle_17652" data-name="Rectangle 17652" width="7.974" height="7.974" transform="translate(95.683 7.973)" fill="#2e353a"/>
<rect id="Rectangle_17654" data-name="Rectangle 17654" width="7.974" height="7.973" transform="translate(103.656 0.001)" fill="#2e353a"/>
<g id="Group_8884" data-name="Group 8884" transform="translate(0 0)">
<g id="Group_8884" data-name="Group 8884">
<g id="Group_8883" data-name="Group 8883" clip-path="url(#clip-path-18)">
<g id="Group_8882" data-name="Group 8882" transform="translate(0 0)" opacity="0.1" style="isolation: isolate">
<g id="Group_8881" data-name="Group 8881" transform="translate(0)">
<g id="Group_8882" data-name="Group 8882" opacity="0.1" style="isolation: isolate">
<g id="Group_8881" data-name="Group 8881">
<g id="Group_8880" data-name="Group 8880" clip-path="url(#clip-path-19)">
<rect id="Rectangle_17656" data-name="Rectangle 17656" width="7.974" height="7.974" transform="translate(0 7.973)" fill="#fff"/>
<rect id="Rectangle_17659" data-name="Rectangle 17659" width="7.974" height="7.974" transform="translate(7.974 0)" fill="#fff"/>
@ -302,8 +302,8 @@
</g>
</g>
</g>
<g id="light-bulb" transform="translate(272.396 326.738)" opacity="0.07">
<path id="XMLID_49_" d="M52.08,62.218V64.3a3.3,3.3,0,0,1-2.8,3.267l-.513,1.89A2.352,2.352,0,0,1,46.5,71.2H41.415a2.352,2.352,0,0,1-2.271-1.743l-.5-1.89a3.314,3.314,0,0,1-2.813-3.282V62.2A2,2,0,0,1,37.84,60.2H50.073A2.023,2.023,0,0,1,52.08,62.218Zm9.42-28.04a17.452,17.452,0,0,1-4.922,12.174,16.084,16.084,0,0,0-4.307,8.731A2.9,2.9,0,0,1,49.4,57.53H38.514A2.872,2.872,0,0,1,35.657,55.1a16.263,16.263,0,0,0-4.336-8.761A17.538,17.538,0,1,1,61.5,34.178ZM45.942,23.557a1.979,1.979,0,0,0-1.978-1.978A12.67,12.67,0,0,0,31.306,34.237a1.978,1.978,0,1,0,3.955,0,8.713,8.713,0,0,1,8.7-8.7A1.97,1.97,0,0,0,45.942,23.557ZM43.964,10.885a1.979,1.979,0,0,0,1.978-1.978V1.978a1.978,1.978,0,0,0-3.955,0V8.907A1.979,1.979,0,0,0,43.964,10.885ZM20.685,34.164a1.979,1.979,0,0,0-1.978-1.978H11.778a1.978,1.978,0,0,0,0,3.955h6.929A1.97,1.97,0,0,0,20.685,34.164ZM76.15,32.186H69.22a1.978,1.978,0,0,0,0,3.955H76.15a1.978,1.978,0,0,0,0-3.955ZM24.714,50.63l-4.908,4.908a1.973,1.973,0,0,0,2.783,2.8L27.5,53.428a1.973,1.973,0,1,0-2.783-2.8ZM61.822,18.283a1.975,1.975,0,0,0,1.392-.571L68.122,12.8a1.979,1.979,0,1,0-2.8-2.8l-4.908,4.908a1.972,1.972,0,0,0,0,2.8A2.009,2.009,0,0,0,61.822,18.283ZM24.714,17.7A1.973,1.973,0,1,0,27.5,14.9L22.589,9.991a1.979,1.979,0,0,0-2.8,2.8Zm38.5,32.933a1.979,1.979,0,0,0-2.8,2.8l4.908,4.908a1.973,1.973,0,0,0,2.784-2.8Z" fill="#fff"/>
<g id="light-bulb" transform="translate(282.24 326.782)" opacity="0.054">
<path id="XMLID_49_" d="M52.08,62.218V64.3a3.3,3.3,0,0,1-2.8,3.267l-.513,1.89A2.352,2.352,0,0,1,46.5,71.2H41.415a2.352,2.352,0,0,1-2.271-1.743l-.5-1.89a3.314,3.314,0,0,1-2.813-3.282V62.2a2,2,0,0,1,2.009-2H50.073a2.023,2.023,0,0,1,2.007,2.018Zm9.42-28.04a17.452,17.452,0,0,1-4.922,12.174,16.084,16.084,0,0,0-4.307,8.731A2.9,2.9,0,0,1,49.4,57.53H38.514a2.872,2.872,0,0,1-2.857-2.43,16.263,16.263,0,0,0-4.336-8.761A17.538,17.538,0,1,1,61.5,34.178ZM45.942,23.557a1.979,1.979,0,0,0-1.978-1.978A12.67,12.67,0,0,0,31.306,34.237a1.978,1.978,0,1,0,3.955,0,8.713,8.713,0,0,1,8.7-8.7,1.97,1.97,0,0,0,1.981-1.98ZM43.964,10.885a1.979,1.979,0,0,0,1.978-1.978V1.978a1.978,1.978,0,0,0-3.955,0V8.907a1.979,1.979,0,0,0,1.977,1.978ZM20.685,34.164a1.979,1.979,0,0,0-1.978-1.978H11.778a1.978,1.978,0,0,0,0,3.955h6.929a1.97,1.97,0,0,0,1.978-1.977ZM76.15,32.186H69.22a1.978,1.978,0,0,0,0,3.955h6.93a1.978,1.978,0,0,0,0-3.955ZM24.714,50.63l-4.908,4.908a1.974,1.974,0,0,0,2.783,2.8l4.911-4.91a1.974,1.974,0,1,0-2.783-2.8ZM61.822,18.283a1.975,1.975,0,0,0,1.392-.571L68.122,12.8a1.98,1.98,0,1,0-2.8-2.8l-4.908,4.908a1.972,1.972,0,0,0,0,2.8A2.009,2.009,0,0,0,61.822,18.283ZM24.714,17.7A1.975,1.975,0,0,0,27.5,14.9L22.589,9.991a1.98,1.98,0,0,0-2.8,2.8Zm38.5,32.933a1.98,1.98,0,1,0-2.8,2.8l4.908,4.908a1.974,1.974,0,0,0,2.784-2.8Z" transform="translate(-9.844 -0.044)" fill="#fff"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

@ -7,9 +7,9 @@
<path id="Path_4718" data-name="Path 4718" d="M120.92,355.582a.707.707,0,0,0-.708-.707h-2.47a.707.707,0,0,0-.707.707v2.469a.707.707,0,0,0,.707.707h2.47a.707.707,0,0,0,.708-.707v-2.469Z" transform="translate(-109.905 -332.206)" fill="#2bb8a6"/>
<path id="Path_4719" data-name="Path 4719" d="M217.555,355.582a.707.707,0,0,0-.707-.707h-2.47a.707.707,0,0,0-.707.707v2.469a.707.707,0,0,0,.707.707h2.47a.707.707,0,0,0,.707-.707Z" transform="translate(-200.367 -332.206)" fill="#2bb8a6"/>
<path id="Path_4720" data-name="Path 4720" d="M314.183,355.582a.707.707,0,0,0-.707-.707h-2.47a.707.707,0,0,0-.708.707v2.469a.707.707,0,0,0,.708.707h2.47a.707.707,0,0,0,.707-.707v-2.469Z" transform="translate(-290.822 -332.206)" fill="#2bb8a6"/>
<path id="Path_4721" data-name="Path 4721" d="M33.188,54.156v3.772A3.081,3.081,0,0,1,30.1,61.006H28.153a3.1,3.1,0,0,1-3.106-3.079V54.142h-8.78v3.786a3.1,3.1,0,0,1-3.106,3.079H11.213a3.081,3.081,0,0,1-3.088-3.079V54.156a2.808,2.808,0,0,0-2.714,2.793V79.055a2.809,2.809,0,0,0,2.8,2.812h24.9a2.812,2.812,0,0,0,2.8-2.812V56.949A2.808,2.808,0,0,0,33.188,54.156Zm-.9,23.522a1.208,1.208,0,0,1-1.208,1.208H10.185a1.208,1.208,0,0,1-1.208-1.208V66.259a1.208,1.208,0,0,1,1.208-1.209h20.89a1.209,1.209,0,0,1,1.208,1.209V77.678Z" transform="translate(-5.411 -50.683)" fill="#2bb8a6"/>
<path id="Path_4722" data-name="Path 4722" d="M80.609,8.3h1.927a1.058,1.058,0,0,0,1.059-1.058V1.059A1.059,1.059,0,0,0,82.536,0H80.609A1.059,1.059,0,0,0,79.55,1.059V7.242A1.058,1.058,0,0,0,80.609,8.3Z" transform="translate(-74.814)" fill="#2bb8a6"/>
<path id="Path_4723" data-name="Path 4723" d="M345.517,8.3h1.927A1.058,1.058,0,0,0,348.5,7.242V1.059A1.059,1.059,0,0,0,347.444,0h-1.927a1.059,1.059,0,0,0-1.059,1.059V7.242A1.058,1.058,0,0,0,345.517,8.3Z" transform="translate(-322.8)" fill="#2bb8a6"/>
<path id="Path_4721" data-name="Path 4721" d="M33.188,54.156v3.772A3.081,3.081,0,0,1,30.1,61.006H28.153a3.1,3.1,0,0,1-3.106-3.079V54.142h-8.78v3.786a3.1,3.1,0,0,1-3.106,3.079H11.213a3.081,3.081,0,0,1-3.088-3.079V54.156a2.808,2.808,0,0,0-2.714,2.793V79.055a2.809,2.809,0,0,0,2.8,2.812h24.9a2.812,2.812,0,0,0,2.8-2.812V56.949A2.808,2.808,0,0,0,33.188,54.156Zm-.9,23.522a1.208,1.208,0,0,1-1.208,1.208H10.185a1.208,1.208,0,0,1-1.208-1.208V66.259a1.208,1.208,0,0,1,1.208-1.209h20.89a1.209,1.209,0,0,1,1.208,1.209V77.678Z" transform="translate(-5.411 -50.683)" fill="#125765"/>
<path id="Path_4722" data-name="Path 4722" d="M80.609,8.3h1.927a1.058,1.058,0,0,0,1.059-1.058V1.059A1.059,1.059,0,0,0,82.536,0H80.609A1.059,1.059,0,0,0,79.55,1.059V7.242A1.058,1.058,0,0,0,80.609,8.3Z" transform="translate(-74.814)" fill="#125765"/>
<path id="Path_4723" data-name="Path 4723" d="M345.517,8.3h1.927A1.058,1.058,0,0,0,348.5,7.242V1.059A1.059,1.059,0,0,0,347.444,0h-1.927a1.059,1.059,0,0,0-1.059,1.059V7.242A1.058,1.058,0,0,0,345.517,8.3Z" transform="translate(-322.8)" fill="#125765"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -494,5 +494,9 @@
"fingersCrossed": "تشابك الاصابع!!!",
"congrats": "مبروك !!!",
"allQuestionsCorrect": "لقد أجبت على جميع الأسئلة بشكل صحيح.",
"otp": "OTP",
"verification": "تَحَقّق",
"resend": "إعادة إرسال",
"codeExpire": "انتهت صلاحية رمز التحقق",
"typeheretoreply": "اكتب هنا للرد"
}

@ -284,7 +284,7 @@
"add": "Add",
"edit": "Edit",
"myProfile": "My Profile",
"mowadhafhi": "Mowadhafhi",
"mowadhafhi": "Mowadhafi",
"searchAnnouncements": "Search Announcements",
"announcements": "Announcements",
"swipeRequest": "Swipe Request",
@ -296,7 +296,7 @@
"relatedTopic": "Related Topic",
"selectTopic": "Select Topic",
"supportingDocument": "Supporting Document",
"mowadhafhiRequest": "Mowadhafhi Request",
"mowadhafhiRequest": "Mowadhafi Request",
"ticketReference": "Ticket Reference",
"section": "Section",
"topic": "Topic",
@ -493,6 +493,10 @@
"winnerSelectedRandomly": "The winner will be selected randomly among the qualifiers.",
"fingersCrossed": "Fingers Crossed!!!",
"congrats": "Congratulations!!!",
"otp": "OTP",
"verification": "Verification",
"resend": "Resend",
"codeExpire": "The verification code has been expired",
"allQuestionsCorrect": "You have answered all questions correct",
"typeheretoreply": "Type here to reply"
}

@ -1 +1 @@
{"v":"5.8.1","fr":30,"ip":0,"op":60,"w":300,"h":300,"nm":"loading_6","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[360]}],"ix":10},"p":{"a":0,"k":[150.00000000000003,150.00000000000003,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[30.000000000000004,30.000000000000004,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.12941176470588237,0.7411764705882353,0.7764705882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[0]},{"t":60,"s":[99]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[1]},{"t":50,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[3]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150.00000000000003,150.00000000000003,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[30.000000000000004,30.000000000000004,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.7450980392156863,0.9254901960784314,0.9372549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0}],"markers":[]}
{"v":"5.8.1","fr":30,"ip":0,"op":60,"w":100,"h":100,"nm":"loading_6","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[360]}],"ix":10},"p":{"a":0,"k":[50.00000000000002,50.00000000000002,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[10.000000000000004,10.000000000000004,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.12941176470588237,0.7411764705882353,0.7764705882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[0]},{"t":60,"s":[99]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[1]},{"t":50,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[3]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[50.00000000000002,50.00000000000002,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[10.000000000000004,10.000000000000004,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.7450980392156863,0.9254901960784314,0.9372549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0}],"markers":[]}

@ -9,6 +9,7 @@ import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart';
import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart';
import 'package:mohem_flutter_app/models/start_eit_approval_process_model.dart';
import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/resubmit_eit_response_model.dart';
class MyAttendanceApiClient {
static final MyAttendanceApiClient _instance = MyAttendanceApiClient._internal();
@ -108,6 +109,21 @@ class MyAttendanceApiClient {
}, url, postParams);
}
Future<ResubmitEITRequestResponse> reSubmitEitTransaction(String itemKey, var notifID, List<Map<String, dynamic>> list) async {
String url = "${ApiConsts.erpRest}RESUBMIT_EIT_TRANSACTION";
Map<String, dynamic> postParams = {
"P_NOTIFICATION_ID": notifID,
"P_ITEM_KEY": itemKey,
"P_EMAIL_ADDRESS": AppState().memberInformationList!.eMPLOYEEEMAILADDRESS,
"EITTransactionTBL": list
};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData.resubmitEITTransactionList!; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson());
}, url, postParams);
}
Future<List<GetApprovesList>> getApproversList(String pAmeTransactionType, int pTransactionId) async {
String url = "${ApiConsts.erpRest}GET_APPROVERS_LIST";
Map<String, dynamic> postParams = {

@ -293,7 +293,7 @@ class ProfileApiClient {
"P_COUNTRY_CODE": countryCode, //"SA",
"P_DESC_FLEX_CONTEXT_CODE": "SA",
"P_FUNCTION_NAME": pFunctionName,
"P_ACTION": correctOrNew == 1 ? 'CORRECT' : 'NEW',
"P_ACTION": correctOrNew == 1 ? 'CORRECT' : 'CHANGE',
"P_EFFECTIVE_DATE": effectiveDate,
//"EITTransactionTBL": list,

@ -23,6 +23,7 @@ import 'package:mohem_flutter_app/models/itg_forms_models/itg_request_model.dart
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart';
import 'package:mohem_flutter_app/models/update_user_item_type_list.dart';
import 'package:mohem_flutter_app/models/worklist/GetRFCEmployeeList.dart';
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
@ -88,6 +89,16 @@ class WorkListApiClient {
}, url, postParams);
}
Future<List<GetRFCEmployeeList>> getRFCEmployeeeList(int pNotificationID) async {
String url = "${ApiConsts.erpRest}GET_RFC_EMPLOYEE_LIST";
Map<String, dynamic> postParams = {"P_NOTIFICATION_ID": pNotificationID, "P_PAGE_NUM": 1, "P_PAGE_LIMIT": 10};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData.getRFCEmployeeListList ?? [];
}, url, postParams);
}
Future<List<GetActionHistoryList>> getActionHistory(int pNotificationID) async {
String url = "${ApiConsts.erpRest}GET_ACTION_HISTORY";
Map<String, dynamic> postParams = {
@ -357,7 +368,7 @@ class WorkListApiClient {
}, url, postParams);
}
Future<ITGRequest?> delegateITGRequest(String requestType, int taskId, int itemId, String employeeNumber,String newUserEMPId, String comments) async {
Future<ITGRequest?> delegateITGRequest(String requestType, int taskId, int itemId, String employeeNumber, String newUserEMPId, String comments) async {
String url = "${ApiConsts.cocRest}ITGDelegateRequest";
Map<String, dynamic> postParams = {
"RequestType": requestType,
@ -373,7 +384,26 @@ class WorkListApiClient {
return responseData.itgRequest;
}, url, postParams);
}
Future<ITGRequest?> informationITGRequest(String requestType, int taskId, int itemId, String employeeNumber,String newUserEMPId, String comments) async {
// ANSWER = 'Services/COCWS.svc/REST/ITGAnswer';
Future<ITGRequest?> answerITGRequest(String requestType, int taskId, int itemId, String employeeNumber, String newUserEMPId, String comments) async {
String url = "${ApiConsts.cocRest}ITGAnswer";
Map<String, dynamic> postParams = {
"RequestType": requestType,
"TaskID": taskId,
"ItemID": itemId,
"EmployeeNumber": employeeNumber,
"Comments": comments,
};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
ItgFormsModel responseData = ItgFormsModel.fromJson(json);
return responseData.itgRequest;
}, url, postParams);
}
Future<ITGRequest?> informationITGRequest(String requestType, int taskId, int itemId, String employeeNumber, String newUserEMPId, String comments) async {
String url = "${ApiConsts.cocRest}ITGRequestInformation";
Map<String, dynamic> postParams = {
"RequestType": requestType,
@ -481,6 +511,16 @@ class WorkListApiClient {
}, url, postParams);
}
Future<List<GetFavoriteReplacements>?> getFavoriteReplacementWithImageNew(String selectedFavLetter) async {
String url = "${ApiConsts.erpRest}Mohemm_GetFavoriteReplacements_Images";
Map<String, dynamic> postParams = {"ItgFilter": selectedFavLetter};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData.mohemmGetFavoriteReplacementsList;
}, url, postParams);
}
Future<GenericResponseModel> changeFavoriteReplacements({required String email, required String employeName, required String image, required String userName, bool isFav = false}) async {
String url = "${ApiConsts.erpRest}Mohemm_ChangeFavoriteReplacements";
Map<String, dynamic> postParamsObj = {
@ -516,7 +556,7 @@ class WorkListApiClient {
}, url, postParams);
}
Future<GenericResponseModel> submitComment({String? comment, String? email, String? userId, int? notificationId, required String apiMode}) async {
Future<GenericResponseModel> submitComment({String? comment, String? email, String? userId, int? notificationId, required String apiMode, int? approverIndex = null}) async {
String url = "${ApiConsts.erpRest}NOTIFICATION_ACTIONS";
Map<String, dynamic> postParams = {
"P_COMMENTS": comment,
@ -524,7 +564,7 @@ class WorkListApiClient {
"P_EMAIL_ADDRESS": email,
"P_FORWARD_TO_USER_NAME": userId,
"P_NOTIFICATION_ID": notificationId,
"P_APPROVER_INDEX": null,
"P_APPROVER_INDEX": approverIndex,
"RespondAttributeList": []
};
postParams.addAll(AppState().postParamsJson);

File diff suppressed because one or more lines are too long

@ -29,6 +29,7 @@ class MyColors {
static const Color darkWhiteColor = Color(0xffE0E0E0);
static const Color redColor = Color(0xffD02127);
static const Color pinkColor = Color(0xffEBA9A9);
static const Color pinkDarkColor = Color(0xffe3797d);
static const Color yellowColor = Color(0xffF4E31C);
static const Color orange = Color(0xFFCC9B14);
static const Color yellowFavColor = Color(0xffEAC321);
@ -58,5 +59,6 @@ class MyColors {
static const Color greyC4Color = Color(0xffC4C4C4);
static const Color grey35Color = Color(0xff535353);
static const Color grey9DColor = Color(0xff9D9D9D);
static const Color darkDigitColor = Color(0xff2D2F39);
static const Color grey71Color = Color(0xff717171);
}

@ -7,7 +7,9 @@ import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/otp_widget.dart';
import 'package:sizer/sizer.dart';
class OtpDialog {
final int type;
@ -15,6 +17,7 @@ class OtpDialog {
final Function(String) onSuccess;
final Function onFailure;
final BuildContext context;
final Function onResendCode;
int remainingTime = 120;
@ -24,13 +27,7 @@ class OtpDialog {
static bool? _loading;
OtpDialog(
this.context,
this.type,
this.mobileNo,
this.onSuccess,
this.onFailure,
);
OtpDialog(this.context, this.type, this.mobileNo, this.onSuccess, this.onFailure, {required this.onResendCode});
GlobalKey? verifyAccountForm = GlobalKey<FormState>();
@ -69,7 +66,7 @@ class OtpDialog {
// projectProvider = Provider.of(context);
return Dialog(
backgroundColor: Colors.white,
shape: const RoundedRectangleBorder(),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
insetPadding: const EdgeInsets.only(left: 21, right: 21),
child: StatefulBuilder(builder: (context, setState) {
if (displayTime == '') {
@ -77,37 +74,26 @@ class OtpDialog {
}
return Container(
padding: EdgeInsets.only(left: 21, right: 18, top: 39, bottom: 59),
padding: EdgeInsets.all(21),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SvgPicture.asset(
type == 1
? "assets/images/login/verify_sms.svg"
: type == 2
? "assets/images/login/verify_whatsapp.svg"
: type == 3
? "assets/images/login/verify_face.svg"
: 'assets/images/login/verify_thumb.svg',
height: 50,
width: 50,
),
IconButton(
padding: EdgeInsets.zero,
icon: const Icon(Icons.close),
constraints: const BoxConstraints(),
onPressed: () {
stopTimer = true;
onFailure();
})
],
SvgPicture.asset(
type == 1
? "assets/images/login/verify_sms.svg"
: type == 2
? "assets/images/login/verify_whatsapp.svg"
: type == 3
? "assets/images/login/verify_face.svg"
: 'assets/images/login/verify_thumb.svg',
height: 50,
width: 50,
),
22.height,
12.height,
LocaleKeys.otp.tr().toText14(),
LocaleKeys.verification.tr().toText24(isBold: true),
6.height,
(LocaleKeys.pleaseEnterTheVerificationCodeSentTo.tr() + ' xxxxxxxx' + mobileNo.toString().substring(mobileNo.toString().length - 3)).toText16(),
18.height,
Directionality(
@ -132,18 +118,55 @@ class OtpDialog {
),
),
),
30.height,
RichText(
text: TextSpan(
text: LocaleKeys.theVerificationCodeWillExpireIn.tr() + '\n',
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: MyColors.darkTextColor, letterSpacing: -0.48),
children: <TextSpan>[
TextSpan(
text: displayTime,
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: MyColors.textMixColor, letterSpacing: -0.48),
10.height,
stopTimer
? Row(
children: [
Expanded(
child: LocaleKeys.codeExpire.tr().toText16(
color: MyColors.redColor,
),
),
12.width,
Image.asset(
"assets/icons/ic_alarm.png",
width: 20,
height: 20,
color: MyColors.redColor,
),
],
)
: RichText(
text: TextSpan(
text: LocaleKeys.theVerificationCodeWillExpireIn.tr() + '\n',
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: MyColors.darkTextColor, letterSpacing: -0.48),
children: <TextSpan>[
TextSpan(
text: displayTime,
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: MyColors.textMixColor, letterSpacing: -0.48),
),
],
),
),
],
),
18.height,
DefaultButton(
stopTimer ? LocaleKeys.resend.tr() : LocaleKeys.cancel.tr(),
() async {
if (stopTimer) {
hideSMSBox(context);
onResendCode();
} else {
stopTimer = true;
// onFailure();
hideSMSBox(context);
}
},
colors: stopTimer
? null
: [
MyColors.pinkDarkColor,
MyColors.pinkDarkColor,
],
),
],
),
@ -208,7 +231,9 @@ class OtpDialog {
if (remainingTime > 0) {
startTimer(setState);
} else {
Navigator.pop(context);
setState(() {
stopTimer = true;
});
}
});
}

@ -509,7 +509,12 @@ class CodegenLoader extends AssetLoader{
"winnerSelectedRandomly": "سيتم اختيار الفائز عشوائياً من بين التصفيات.",
"fingersCrossed": "تشابك الاصابع!!!",
"congrats": "مبروك !!!",
"allQuestionsCorrect": "لقد أجبت على جميع الأسئلة بشكل صحيح."
"allQuestionsCorrect": "لقد أجبت على جميع الأسئلة بشكل صحيح.",
"otp": "OTP",
"verification": "تَحَقّق",
"resend": "إعادة إرسال",
"codeExpire": "انتهت صلاحية رمز التحقق",
"typeheretoreply": "اكتب هنا للرد"
};
static const Map<String,dynamic> en_US = {
"mohemm": "Mohemm",
@ -797,7 +802,7 @@ static const Map<String,dynamic> en_US = {
"add": "Add",
"edit": "Edit",
"myProfile": "My Profile",
"mowadhafhi": "Mowadhafhi",
"mowadhafhi": "Mowadhafi",
"searchAnnouncements": "Search Announcements",
"announcements": "Announcements",
"swipeRequest": "Swipe Request",
@ -809,7 +814,7 @@ static const Map<String,dynamic> en_US = {
"relatedTopic": "Related Topic",
"selectTopic": "Select Topic",
"supportingDocument": "Supporting Document",
"mowadhafhiRequest": "Mowadhafhi Request",
"mowadhafhiRequest": "Mowadhafi Request",
"ticketReference": "Ticket Reference",
"section": "Section",
"topic": "Topic",
@ -1006,7 +1011,12 @@ static const Map<String,dynamic> en_US = {
"winnerSelectedRandomly": "The winner will be selected randomly among the qualifiers.",
"fingersCrossed": "Fingers Crossed!!!",
"congrats": "Congratulations!!!",
"allQuestionsCorrect": "You have answered all questions correct"
"otp": "OTP",
"verification": "Verification",
"resend": "Resend",
"codeExpire": "The verification code has been expired",
"allQuestionsCorrect": "You have answered all questions correct",
"typeheretoreply": "Type here to reply"
};
static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US};
}

@ -480,6 +480,10 @@ abstract class LocaleKeys {
static const fingersCrossed = 'fingersCrossed';
static const congrats = 'congrats';
static const allQuestionsCorrect = 'allQuestionsCorrect';
static const otp = 'otp';
static const verification = 'verification';
static const resend = 'resend';
static const codeExpire = 'codeExpire';
static const typeheretoreply = 'typeheretoreply';
}

@ -99,12 +99,14 @@ import 'package:mohem_flutter_app/models/vacation_rule/respond_attributes_list_m
import 'package:mohem_flutter_app/models/vacation_rule/vr_item_types_list_model.dart';
import 'package:mohem_flutter_app/models/vacation_rule/wf_look_up_list_model.dart';
import 'package:mohem_flutter_app/models/validate_eit_transaction_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/GetRFCEmployeeList.dart';
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/resubmit_eit_response_model.dart';
import 'package:mohem_flutter_app/models/worklist_response_model.dart';
import 'package:mohem_flutter_app/start_term_approval_process_list_model.dart';
@ -224,7 +226,7 @@ class GenericResponseModel {
GetPoNotificationBodyList? getPoNotificationBodyList;
GetPrNotificationBodyList? getPrNotificationBodyList;
List<GetQuotationAnalysisList>? getQuotationAnalysisList;
List<String>? getRFCEmployeeListList;
List<GetRFCEmployeeList>? getRFCEmployeeListList;
List<String>? getRespondAttributeValueList;
List<String>? getSITCollectionNotificationBodyList;
List<String>? getSITDFFStructureList;
@ -326,7 +328,7 @@ class GenericResponseModel {
List<RespondAttributesList>? respondAttributesList;
List<String>? respondRolesList;
String? resubmitAbsenceTransactionList;
String? resubmitEITTransactionList;
ResubmitEITRequestResponse? resubmitEITTransactionList;
String? resubmitHrTransactionList;
String? sFHGetPoNotificationBodyList;
String? sFHGetPrNotificationBodyList;
@ -975,7 +977,7 @@ class GenericResponseModel {
getQuotationAnalysisList!.add(GetQuotationAnalysisList.fromJson(v));
});
}
getRFCEmployeeListList = json['GetRFCEmployeeListList'];
getRespondAttributeValueList = json['GetRespondAttributeValueList'];
getSITCollectionNotificationBodyList = json['GetSITCollectionNotificationBodyList'];
getSITDFFStructureList = json['GetSITDFFStructureList'];
@ -986,6 +988,14 @@ class GenericResponseModel {
getScheduleShiftsDetailsList!.add(GetScheduleShiftsDetailsList.fromJson(v));
});
}
if (json['GetRFCEmployeeListList'] != null) {
getRFCEmployeeListList = <GetRFCEmployeeList>[];
json['GetRFCEmployeeListList'].forEach((v) {
getRFCEmployeeListList!.add(GetRFCEmployeeList.fromJson(v));
});
}
getShiftTypesList = json['GetShiftTypesList'];
if (json['GetStampMsNotificationBodyList'] != null) {
@ -1273,11 +1283,11 @@ class GenericResponseModel {
if (json['RespondRolesList'] != null) {
respondRolesList = <String>[];
json['RespondRolesList'].forEach((v) {
respondRolesList!.add(v);
// respondRolesList!.add(v);
});
}
resubmitAbsenceTransactionList = json['ResubmitAbsenceTransactionList'];
resubmitEITTransactionList = json['ResubmitEITTransactionList'];
resubmitEITTransactionList = json['ResubmitEITTransactionList'] != null ? ResubmitEITRequestResponse.fromJson(json['ResubmitEITTransactionList']) : null;
resubmitHrTransactionList = json['ResubmitHrTransactionList'];
sFHGetPoNotificationBodyList = json['SFH_GetPoNotificationBodyList'];
sFHGetPrNotificationBodyList = json['SFH_GetPrNotificationBodyList'];
@ -1291,7 +1301,7 @@ class GenericResponseModel {
startEitApprovalProcess = json['StartEitApprovalProcess'] != null ? StartEitApprovalProcess.fromJson(json['StartEitApprovalProcess']) : null;
startHrApprovalProcessList = json['StartHrApprovalProcessList'];
startPhonesApprovalProcessList = json['StartPhonesApprovalProcessList'] != null ? StartPhoneApprovalProcess.fromJson(json['startPhonesApprovalProcessList']) : null;
startPhonesApprovalProcessList = json['StartPhonesApprovalProcessList'] != null ? StartPhoneApprovalProcess.fromJson(json['StartPhonesApprovalProcessList']) : null;
startSitApprovalProcess = json['StartSitApprovalProcess'];
startTermApprovalProcessList = json['StartTermApprovalProcessList'] != null ? StartTermApprovalProcessList.fromJson(json['StartTermApprovalProcessList']) : null;

@ -5,7 +5,7 @@
String? dATATYPE;
String? dATEVALUE;
String? dISPLAYFLAG;
Null? nUMBERVALUE;
dynamic? nUMBERVALUE;
String? sEGMENTPROMPT;
int? sEGMENTSEQNUM;
String? sEGMENTVALUEDSP;

@ -5,7 +5,7 @@ class GetAddressDffStructureList {
String? aLPHANUMERICALLOWEDFLAG;
String? aPPLICATIONCOLUMNNAME;
String? cHILDSEGMENTSVS;
Null? cHILDSEGMENTSVSSplited;
dynamic? cHILDSEGMENTSVSSplited;
String? dEFAULTTYPE;
String? dEFAULTVALUE;
String? dESCFLEXCONTEXTCODE;
@ -27,9 +27,9 @@ class GetAddressDffStructureList {
String? nUMBERPRECISION;
String? nUMERICMODEENABLEDFLAG;
String? pARENTSEGMENTSDV;
List<Null>? pARENTSEGMENTSDVSplited;
List<dynamic>? pARENTSEGMENTSDVSplited;
String? pARENTSEGMENTSVS;
List<Null>? pARENTSEGMENTSVSSplitedVS;
List<dynamic>? pARENTSEGMENTSVSSplitedVS;
String? rEADONLY;
String? rEQUIREDFLAG;
String? sEGMENTNAME;

@ -0,0 +1,48 @@
class GetRFCEmployeeList {
String? aCTION;
String? eMPLOYEEDISPLAYNAME;
String? eMPLOYEEIMAGE;
int? fROMROWNUM;
int? nOOFROWS;
int? rOWNUM;
int? sEQ;
int? tOROWNUM;
String? uSERNAME;
GetRFCEmployeeList(
{this.aCTION,
this.eMPLOYEEDISPLAYNAME,
this.eMPLOYEEIMAGE,
this.fROMROWNUM,
this.nOOFROWS,
this.rOWNUM,
this.sEQ,
this.tOROWNUM,
this.uSERNAME});
GetRFCEmployeeList.fromJson(Map<String, dynamic> json) {
aCTION = json['ACTION'];
eMPLOYEEDISPLAYNAME = json['EMPLOYEE_DISPLAY_NAME'];
eMPLOYEEIMAGE = json['EMPLOYEE_IMAGE'];
fROMROWNUM = json['FROM_ROW_NUM'];
nOOFROWS = json['NO_OF_ROWS'];
rOWNUM = json['ROW_NUM'];
sEQ = json['SEQ'];
tOROWNUM = json['TO_ROW_NUM'];
uSERNAME = json['USER_NAME'];
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>();
data['ACTION'] = this.aCTION;
data['EMPLOYEE_DISPLAY_NAME'] = this.eMPLOYEEDISPLAYNAME;
data['EMPLOYEE_IMAGE'] = this.eMPLOYEEIMAGE;
data['FROM_ROW_NUM'] = this.fROMROWNUM;
data['NO_OF_ROWS'] = this.nOOFROWS;
data['ROW_NUM'] = this.rOWNUM;
data['SEQ'] = this.sEQ;
data['TO_ROW_NUM'] = this.tOROWNUM;
data['USER_NAME'] = this.uSERNAME;
return data;
}
}

@ -16,10 +16,10 @@ class GetFavoriteReplacements {
this.employeeImage,
});
final String? userName;
final String? employeeDisplayName;
final String? emailAddress;
final String? employeeImage;
String? userName;
String? employeeDisplayName;
String? emailAddress;
String? employeeImage;
factory GetFavoriteReplacements.fromJson(Map<String, dynamic> json) => GetFavoriteReplacements(
userName: json["USER_NAME"] == null ? null : json["USER_NAME"],

@ -23,7 +23,7 @@ class ReplacementList {
final String? emailAddress;
final String? employeeDisplayName;
final String? employeeImage;
String? employeeImage;
final int? fromRowNum;
bool? isFavorite;
final int? noOfRows;

@ -0,0 +1,22 @@
class ResubmitEITRequestResponse {
String? pRETURNMSG;
String? pRETURNSTATUS;
int? pTRANSACTIONID;
ResubmitEITRequestResponse(
{this.pRETURNMSG, this.pRETURNSTATUS, this.pTRANSACTIONID});
ResubmitEITRequestResponse.fromJson(Map<String, dynamic> json) {
pRETURNMSG = json['P_RETURN_MSG'];
pRETURNSTATUS = json['P_RETURN_STATUS'];
pTRANSACTIONID = json['P_TRANSACTION_ID'];
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>();
data['P_RETURN_MSG'] = this.pRETURNMSG;
data['P_RETURN_STATUS'] = this.pRETURNSTATUS;
data['P_TRANSACTION_ID'] = this.pTRANSACTIONID;
return data;
}
}

@ -98,7 +98,7 @@ class _AddVacationRuleScreenState extends State<AddVacationRuleScreen> {
}
void callCombineApis() async {
try {
try {
Utils.showLoading(context);
List results = await Future.wait([
VacationRuleApiClient().getNotificationReassignMode(),

@ -287,7 +287,6 @@ class _MonthlyAttendanceScreenState extends State<MonthlyAttendanceScreen> {
cellBorderColor: Colors.white,
selectionDecoration: BoxDecoration(
border: Border.all(color: MyColors.white, width: 10),
borderRadius: const BorderRadius.all(Radius.circular(100)),
shape: BoxShape.circle,
),
dataSource: MeetingDataSource(_getDataSource()),

@ -1,11 +1,41 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
import 'package:lottie/lottie.dart';
class SuccessDialog extends StatelessWidget {
class SuccessDialog extends StatefulWidget {
bool isFromDashboard;
SuccessDialog(this.isFromDashboard);
@override
State<SuccessDialog> createState() => _SuccessDialogState();
}
class _SuccessDialogState extends State<SuccessDialog> with TickerProviderStateMixin {
late AnimationController _controller;
@override
void initState() {
_controller = AnimationController(vsync: this);
super.initState();
}
Future<void> playSuccessSound() async {
AudioPlayer player = AudioPlayer();
String audioAsset = "";
if (Platform.isAndroid) {
audioAsset = "assets/audio/success_tone_android.mp3";
} else {
audioAsset = "assets/audio/success_tone_ios.caf";
}
await player.setAsset(audioAsset);
await player.load();
player.play();
}
@override
Widget build(BuildContext context) {
double size = MediaQuery.of(context).size.width / 1.8;
@ -18,13 +48,22 @@ class SuccessDialog extends StatelessWidget {
width: size,
height: size,
child: Card(
child: Lottie.asset('assets/lottie/lt_success.json', repeat: false, reverse: false, onLoaded: (v) {
print("calling_lottie " + v.seconds.toString());
Future.delayed(Duration(seconds: 2)).then((value) {
Navigator.pop(context);
if (isFromDashboard) Navigator.pop(context);
});
}),
child: Lottie.asset(
'assets/lottie/lt_success.json',
repeat: false,
reverse: false,
controller: _controller,
onLoaded: (LottieComposition v) async {
print("calling_lottie " + v.seconds.toString());
await playSuccessSound();
_controller
..duration = v.duration
..forward().whenComplete(() async {
Navigator.pop(context);
if (widget.isFromDashboard) Navigator.pop(context);
});
},
),
),
),
],

@ -1,20 +1,12 @@
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart';
import 'package:mohem_flutter_app/models/dashboard/menus.dart';
import 'package:mohem_flutter_app/models/eit/get_eit_transaction_model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/provider/eit_provider_model.dart';
import 'package:mohem_flutter_app/ui/work_list/work_list_screen.dart';
import 'package:mohem_flutter_app/widgets/loading_dialog.dart';
import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart';
import 'package:provider/provider.dart';
class MissingSwipe extends StatelessWidget {

@ -22,8 +22,8 @@ class ServicesWidget extends StatelessWidget {
"assets/images/monthly_attendance.svg",
"assets/images/monthly_attendance.svg",
"assets/images/ticket_request.svg",
"assets/images/ticket_request.svg",
"assets/images/ticket_request.svg",
"assets/images/ticket_bal.svg",
"assets/images/vacation_rule.svg",
"assets/images/ticket_request.svg",
"assets/images/ticket_request.svg",
"assets/images/ticket_request.svg"

@ -92,7 +92,7 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
}
void validateAbsenceTransaction() async {
// try {
try {
Utils.showLoading(context);
Map<String, String?> dffDataMap = {};
for (int i = 1; i <= 20; i++) {
@ -100,7 +100,8 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
for (int dffIndex = 0; dffIndex < getabsenceDffStructureList.length; dffIndex++) {
if ("ATTRIBUTE$i" == getabsenceDffStructureList[dffIndex].aPPLICATIONCOLUMNNAME) {
if (getabsenceDffStructureList[dffIndex].fORMATTYPE == "X") {
dffDataMap["P_ATTRIBUTE$i"] = getabsenceDffStructureList[dffIndex].eSERVICESDV!.pIDCOLUMNNAME != null ? Utils.formatDate(getabsenceDffStructureList[dffIndex].eSERVICESDV!.pIDCOLUMNNAME!) : "";
dffDataMap["P_ATTRIBUTE$i"] =
getabsenceDffStructureList[dffIndex].eSERVICESDV!.pIDCOLUMNNAME != null ? Utils.formatDate(getabsenceDffStructureList[dffIndex].eSERVICESDV!.pIDCOLUMNNAME!) : "";
} else {
dffDataMap["P_ATTRIBUTE$i"] = getabsenceDffStructureList[dffIndex].eSERVICESDV?.pIDCOLUMNNAME;
}
@ -108,9 +109,17 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
}
}
}
await LeaveBalanceApiClient().validateAbsenceTransaction(selectedAbsenceType!.dESCFLEXCONTEXTCODE!, "HR_LOA_SS", selectedAbsenceType!.aBSENCEATTENDANCETYPEID!,
selectedReplacementEmployee != null ? selectedReplacementEmployee!.userName! : "", DateUtil.getFormattedDate(startDateTime!, "MM/dd/yyyy"), DateUtil.getFormattedDate(endDateTime!, "MM/dd/yyyy"), -999, dffDataMap,
comments: comment);
await LeaveBalanceApiClient()
.validateAbsenceTransaction(
selectedAbsenceType!.dESCFLEXCONTEXTCODE!,
"HR_LOA_SS",
selectedAbsenceType!.aBSENCEATTENDANCETYPEID!,
selectedReplacementEmployee != null ? selectedReplacementEmployee!.userName! : "",
DateUtil.getFormattedDate(startDateTime!, "MM/dd/yyyy"),
DateUtil.getFormattedDate(endDateTime!, "MM/dd/yyyy"),
-999,
dffDataMap,
comments: comment);
SumbitAbsenceTransactionList submit = await LeaveBalanceApiClient().submitAbsenceTransaction(
selectedAbsenceType!.dESCFLEXCONTEXTCODE!,
@ -126,13 +135,13 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
Utils.hideLoading(context);
await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submit.pTRANSACTIONID!, "", "add_leave_balance"));
// Utils.showLoading(context);
Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(submit.pTRANSACTIONID!);
// Utils.hideLoading(context);
// } catch (ex) {
// Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
// }
Utils.hideLoading(context);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
@override
@ -221,7 +230,7 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
onTap: () {
showMyBottomSheet(
context,
callBackFunc: (){},
callBackFunc: () {},
child: SearchEmployeeBottomSheet(
title: LocaleKeys.searchForEmployee.tr(),
apiMode: LocaleKeys.delegate.tr(),

@ -62,7 +62,7 @@ class _LeaveBalanceState extends State<LeaveBalance> {
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(21),
children: [
BalancesDashboardWidget(LocaleKeys.currentLeaveBalance.tr(), true),
BalancesDashboardWidget(LocaleKeys.currentLeaveBalance.tr(), true),
12.height,
absenceTransList == null
? const SizedBox()
@ -76,14 +76,23 @@ class _LeaveBalanceState extends State<LeaveBalance> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
ItemDetailView(LocaleKeys.startDateT.tr(), absenceTransList![index].sTARTDATE ?? ""),
ItemDetailView(LocaleKeys.endDateT.tr(), absenceTransList![index].eNDDATE ?? ""),
ItemDetailView(LocaleKeys.absenceType.tr(), absenceTransList![index].aBSENCETYPE ?? ""),
ItemDetailView(LocaleKeys.absenceCategory.tr(), absenceTransList![index].aBSENCECATEGORY ?? ""),
ItemDetailView(LocaleKeys.days.tr(), absenceTransList![index].aBSENCEDAYS?.toString() ?? ""),
ItemDetailView(LocaleKeys.hours.tr(), absenceTransList![index].aBSENCEHOURS?.toString() ?? ""),
ItemDetailView(LocaleKeys.approvalStatus.tr(), absenceTransList![index].aPPROVALSTATUS ?? ""),
ItemDetailView(LocaleKeys.absenceStatus.tr(), absenceTransList![index].aBSENCESTATUS ?? ""),
ItemDetailGrid(
ItemDetailViewCol(LocaleKeys.startDateT.tr(), absenceTransList![index].sTARTDATE ?? ""),
ItemDetailViewCol(LocaleKeys.endDateT.tr(), absenceTransList![index].eNDDATE ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol(LocaleKeys.absenceType.tr(), absenceTransList![index].aBSENCETYPE ?? ""),
ItemDetailViewCol(LocaleKeys.absenceCategory.tr(), absenceTransList![index].aBSENCECATEGORY ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol(LocaleKeys.days.tr(), absenceTransList![index].aBSENCEDAYS?.toString() ?? ""),
ItemDetailViewCol(LocaleKeys.hours.tr(), absenceTransList![index].aBSENCEHOURS?.toString() ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol(LocaleKeys.approvalStatus.tr(), absenceTransList![index].aPPROVALSTATUS ?? ""),
ItemDetailViewCol(LocaleKeys.absenceStatus.tr(), absenceTransList![index].aBSENCESTATUS ?? ""),
isItLast: true,
),
],
).objectContainerView(),
separatorBuilder: (cxt, index) => 12.height,

@ -65,11 +65,14 @@ class _ForgotPasswordScreenState extends State<ForgotPasswordScreen> {
() => {
Navigator.pop(context),
},
onResendCode: () {
performForgotPassword();
},
).displayDialog(context);
} catch (ex) {
print(ex);
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
Utils.handleException(ex, context, null);
}
}

@ -145,8 +145,8 @@ class _LoginScreenState extends State<LoginScreen> {
// username.text = "15153"; // Tamer User
// password.text = "Abcd@12345";
username.text = "210038"; // Hashim User
password.text = "123";
// username.text = "206535"; // Hashim User
// password.text = "Namira786";
}
if (isAppOpenBySystem!) checkFirebaseToken();
}

@ -57,30 +57,22 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
@override
Widget build(BuildContext context) {
mobileLoginInfoListModel ??= ModalRoute.of(context)!.settings.arguments
as GetMobileLoginInfoListModel;
String empName = AppState().isArabic(context)
? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr!
: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn!;
mobileLoginInfoListModel ??= ModalRoute.of(context)!.settings.arguments as GetMobileLoginInfoListModel;
// String empName = AppState().isArabic(context) ? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr! : AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn!;
String empName = mobileLoginInfoListModel!.employeeName!;
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,
automaticallyImplyLeading: false,
title: (mobileLoginInfoListModel?.businessCardPrivilege ?? false)
? LocaleKeys.viewBusinessCard
.tr()
.toText12(color: MyColors.textMixColor, isUnderLine: true)
.onPress(() {
? LocaleKeys.viewBusinessCard.tr().toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {
showMDialog(context, child: BusinessCardDialog());
})
: null,
: Container(),
actions: [
Center(
child: LocaleKeys.employeeDigitalID
.tr()
.toText12(color: MyColors.textMixColor, isUnderLine: true)
.onPress(() {
child: LocaleKeys.employeeDigitalID.tr().toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {
showMDialog(context, child: EmployeeDigitialIdDialog());
})),
21.width
@ -99,12 +91,9 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.welcomeBack.tr().toText12(),
mobileLoginInfoListModel!.employeeName!
.toText24(isBold: true),
mobileLoginInfoListModel!.employeeName!.toText24(isBold: true),
10.height,
LocaleKeys.wouldYouLikeToLoginWithCurrentUsername
.tr()
.toText16(),
LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText16(),
Container(
height: 72,
margin: const EdgeInsets.only(top: 23, bottom: 23),
@ -126,42 +115,26 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
LocaleKeys.lastLoginDetails.tr().toText16(),
DateUtil.formatDateToDate(
DateUtil.convertStringToDate(
mobileLoginInfoListModel!.editedOn!),
false)
.toText12(),
DateUtil.formatDateToDate(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!), false).toText12(),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
LocaleKeys.verificationType
.tr()
.toText10(color: MyColors.grey57Color),
getVerificationType(
mobileLoginInfoListModel!.loginType!)
.toText12(),
LocaleKeys.verificationType.tr().toText10(color: MyColors.grey57Color),
getVerificationType(mobileLoginInfoListModel!.loginType!).toText12(),
Expanded(child: SizedBox()),
DateUtil.formatDateToTime(
DateUtil.convertStringToDate(
mobileLoginInfoListModel!.editedOn!))
.toText12(),
DateUtil.formatDateToTime(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!)).toText12(),
],
)
],
),
),
LocaleKeys.pleaseVerify.tr().toText16(),
if (isNeedVerifyWithFaceIDAndBiometrics)
LocaleKeys.pleaseVerifyForBio.tr().toText12(),
if (isNeedVerifyWithFaceIDAndBiometrics) LocaleKeys.pleaseVerifyForBio.tr().toText12(),
GridView(
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 13,
mainAxisSpacing: 9),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
physics: const NeverScrollableScrollPhysics(),
padding: const EdgeInsets.only(top: 9),
shrinkWrap: true,
@ -214,9 +187,7 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
DefaultButton(
LocaleKeys.useAnotherAccount.tr(),
() {
Navigator.pushNamedAndRemoveUntil(
context, AppRoutes.login, (Route<dynamic> route) => false,
arguments: false);
Navigator.pushNamedAndRemoveUntil(context, AppRoutes.login, (Route<dynamic> route) => false, arguments: false);
},
).insideContainer,
],
@ -248,19 +219,11 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
}
Future<bool> loginWithFaceIDAndBiometrics() async {
IOSAuthMessages iosStrings = const IOSAuthMessages(
cancelButton: 'cancel',
goToSettingsButton: 'settings',
goToSettingsDescription: 'Please set up your Touch ID.',
lockOut: 'Please reenable your Touch ID');
IOSAuthMessages iosStrings =
const IOSAuthMessages(cancelButton: 'cancel', goToSettingsButton: 'settings', goToSettingsDescription: 'Please set up your Touch ID.', lockOut: 'Please reenable your Touch ID');
bool authenticated = false;
try {
authenticated = await auth.authenticate(
localizedReason: 'Scan your fingerprint to authenticate',
useErrorDialogs: true,
stickyAuth: true,
biometricOnly: true,
iOSAuthStrings: iosStrings);
authenticated = await auth.authenticate(localizedReason: 'Scan your fingerprint to authenticate', useErrorDialogs: true, stickyAuth: true, biometricOnly: true, iOSAuthStrings: iosStrings);
} on PlatformException catch (e) {
print(e);
Utils.hideLoading(context);
@ -269,11 +232,8 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
return authenticated;
}
Widget _loginOptionButton(
String _title, String _icon, int _flag, int? _loginIndex) {
bool isDisable = ((_flag == 3 &&
!checkBiometricIsAvailable(BiometricType.face)) ||
(_flag == 4 && !checkBiometricIsAvailable(BiometricType.fingerprint)));
Widget _loginOptionButton(String _title, String _icon, int _flag, int? _loginIndex) {
bool isDisable = ((_flag == 3 && !checkBiometricIsAvailable(BiometricType.face)) || (_flag == 4 && !checkBiometricIsAvailable(BiometricType.fingerprint)));
return InkWell(
onTap: isDisable
? null
@ -284,21 +244,18 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
});
} else {
if (_flag == 3 || _flag == 4) {
bool authenticateWithFaceAndTouchID =
await loginWithFaceIDAndBiometrics();
bool authenticateWithFaceAndTouchID = await loginWithFaceIDAndBiometrics();
if (!authenticateWithFaceAndTouchID) {
return;
} else {
if (mobileLoginInfoListModel!.loginType == 3 ||
mobileLoginInfoListModel!.loginType == 4) {
if (mobileLoginInfoListModel!.loginType == 3 || mobileLoginInfoListModel!.loginType == 4) {
// bool authenticateWithFaceAndTouchID = await loginWithFaceIDAndBiometrics();
// if (!authenticateWithFaceAndTouchID) {
// return;
// } else {
// performApiCall(_title, _icon, _flag, isDirectLogin: true);
// }
performApiCall(_title, _icon, _flag, _flag,
isDirectLogin: true);
performApiCall(_title, _icon, _flag, _flag, isDirectLogin: true);
} else {
isNeedVerifyWithFaceIDAndBiometrics = true;
selectedFlag = _flag;
@ -316,8 +273,7 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
}
},
child: Container(
padding:
const EdgeInsets.only(left: 20, right: 20, bottom: 15, top: 28),
padding: const EdgeInsets.only(left: 20, right: 20, bottom: 15, top: 28),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: isDisable ? Colors.grey.withOpacity(0.3) : Colors.white,
@ -343,23 +299,13 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
Widget getButton(int flag) {
switch (flag) {
case 1:
return _loginOptionButton(LocaleKeys.verifyThroughSMS.tr(),
'assets/images/login/verify_sms.svg', flag, null);
return _loginOptionButton(LocaleKeys.verifyThroughSMS.tr(), 'assets/images/login/verify_sms.svg', flag, null);
case 2:
return _loginOptionButton(LocaleKeys.verifyThroughWhatsapp.tr(),
'assets/images/login/verify_whatsapp.svg', flag, null);
return _loginOptionButton(LocaleKeys.verifyThroughWhatsapp.tr(), 'assets/images/login/verify_whatsapp.svg', flag, null);
case 3:
return _loginOptionButton(
LocaleKeys.verifyThroughFace.tr(),
'assets/images/login/verify_face.svg',
flag,
BiometricType.face.index);
return _loginOptionButton(LocaleKeys.verifyThroughFace.tr(), 'assets/images/login/verify_face.svg', flag, BiometricType.face.index);
case 4:
return _loginOptionButton(
LocaleKeys.verifyThroughFingerprint.tr(),
'assets/images/login/verify_thumb.svg',
flag,
BiometricType.fingerprint.index);
return _loginOptionButton(LocaleKeys.verifyThroughFingerprint.tr(), 'assets/images/login/verify_thumb.svg', flag, BiometricType.fingerprint.index);
default:
return const SizedBox();
}
@ -376,9 +322,7 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
return isAvailable;
}
Future<void> performApiCall(
String _title, String _icon, int _flag, int sendVerificationFlat,
{bool isDirectLogin = false}) async {
Future<void> performApiCall(String _title, String _icon, int _flag, int sendVerificationFlat, {bool isDirectLogin = false}) async {
try {
if (isDirectLogin)
setState(() {
@ -387,16 +331,10 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
else
Utils.showLoading(context);
await LoginApiClient().checkMobileAppVersion();
await LoginApiClient()
.memberLogin(AppState().getUserName!, AppState().password!);
await LoginApiClient().memberLogin(AppState().getUserName!, AppState().password!);
if (!isDirectLogin)
BasicMemberInformationModel? memberInformationModel =
await LoginApiClient()
.mohemmSendActivationCodeByOTPNotificationType(
0,
AppState().memberLoginList?.pMOBILENUMBER,
sendVerificationFlat,
AppState().getUserName);
await LoginApiClient().mohemmSendActivationCodeByOTPNotificationType(0, AppState().memberLoginList?.pMOBILENUMBER, sendVerificationFlat, AppState().getUserName);
if (isDirectLogin) performDirectApiCall(_title, _icon, _flag, "");
if (!isDirectLogin) Utils.hideLoading(context);
if (!isDirectLogin)
@ -411,6 +349,9 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
() => {
Navigator.pop(context),
},
onResendCode: () {
performApiCall(_title, _icon, _flag, sendVerificationFlat, isDirectLogin: isDirectLogin);
},
).displayDialog(context);
} catch (ex) {
Utils.hideLoading(context);
@ -418,34 +359,26 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
}
}
Future<void> performDirectApiCall(
String _title, String _icon, int _flag, String value,
{bool isDirectLogin = false}) async {
Future<void> performDirectApiCall(String _title, String _icon, int _flag, String value, {bool isDirectLogin = false}) async {
try {
GenericResponseModel? genericResponseModel = await LoginApiClient()
.checkActivationCode(false, AppState().memberLoginList?.pMOBILENUMBER,
value, AppState().getUserName);
GenericResponseModel? genericResponseModel1 = await LoginApiClient()
.insertMobileLoginInfoNEW(
AppState().memberLoginList?.pEMAILADDRESS ?? "",
genericResponseModel?.pSESSIONID ?? 0,
genericResponseModel?.memberInformationList![0].eMPLOYEENAME ??
"",
_flag,
AppState().memberLoginList?.pMOBILENUMBER ?? "",
AppState().getUserName!,
mobileLoginInfoListModel!.deviceToken!,
Platform.isAndroid ? "android" : "ios");
AppState().setMemberInformationListModel =
genericResponseModel!.memberInformationList?.first;
GenericResponseModel? genericResponseModel = await LoginApiClient().checkActivationCode(false, AppState().memberLoginList?.pMOBILENUMBER, value, AppState().getUserName);
GenericResponseModel? genericResponseModel1 = await LoginApiClient().insertMobileLoginInfoNEW(
AppState().memberLoginList?.pEMAILADDRESS ?? "",
genericResponseModel?.pSESSIONID ?? 0,
genericResponseModel?.memberInformationList![0].eMPLOYEENAME ?? "",
_flag,
AppState().memberLoginList?.pMOBILENUMBER ?? "",
AppState().getUserName!,
mobileLoginInfoListModel!.deviceToken!,
Platform.isAndroid ? "android" : "ios");
AppState().setMemberInformationListModel = genericResponseModel!.memberInformationList?.first;
if (genericResponseModel?.errorMessage != null) {
Utils.showToast(genericResponseModel?.errorMessage ?? "");
// Navigator.pop(context);
}
Utils.hideLoading(context);
Navigator.pop(context);
Navigator.pushNamedAndRemoveUntil(
context, AppRoutes.dashboard, (Route<dynamic> route) => false);
Navigator.pushNamedAndRemoveUntil(context, AppRoutes.dashboard, (Route<dynamic> route) => false);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);

@ -511,7 +511,6 @@ class _VerifyLoginScreenState extends State<VerifyLoginScreen> {
// }
//
Future<bool> loginWithFaceIDAndBiometrics() async {
IOSAuthMessages iosStrings =
const IOSAuthMessages(cancelButton: 'cancel', goToSettingsButton: 'settings', goToSettingsDescription: 'Please set up your Touch ID.', lockOut: 'Please reenable your Touch ID');
@ -550,9 +549,9 @@ class _VerifyLoginScreenState extends State<VerifyLoginScreen> {
}
} else {
if (isNeedVerifyWithFaceIDAndBiometrics)
performApiCall(_title, _icon, selectedFlag,_flag);
performApiCall(_title, _icon, selectedFlag, _flag);
else
performApiCall(_title, _icon, _flag,_flag);
performApiCall(_title, _icon, _flag, _flag);
}
}
},
@ -606,13 +605,13 @@ class _VerifyLoginScreenState extends State<VerifyLoginScreen> {
return isAvailable;
}
Future<void> performApiCall(String _title, String _icon, int _flag,int sendVerificationFlat) async {
Future<void> performApiCall(String _title, String _icon, int _flag, int sendVerificationFlat) async {
try {
Utils.showLoading(context);
await LoginApiClient().checkMobileAppVersion();
await LoginApiClient().memberLogin(AppState().getUserName!, AppState().password!);
BasicMemberInformationModel? memberInformationModel = await LoginApiClient()
.mohemmSendActivationCodeByOTPNotificationType(0, AppState().memberLoginList?.pMOBILENUMBER, sendVerificationFlat, AppState().getUserName);
BasicMemberInformationModel? memberInformationModel =
await LoginApiClient().mohemmSendActivationCodeByOTPNotificationType(0, AppState().memberLoginList?.pMOBILENUMBER, sendVerificationFlat, AppState().getUserName);
Utils.hideLoading(context);
OtpDialog(
context,
@ -633,8 +632,6 @@ class _VerifyLoginScreenState extends State<VerifyLoginScreen> {
Platform.isAndroid ? "android" : "ios");
if (genericResponseModel?.errorMessage != null) {
Utils.showToast(genericResponseModel?.errorMessage ?? "");
} else {
AppState().setPrivilegeListModel = genericResponseModel!.privilegeList ?? [];
AppState().setMemberInformationListModel = genericResponseModel.memberInformationList?.first;
@ -662,6 +659,9 @@ class _VerifyLoginScreenState extends State<VerifyLoginScreen> {
() => {
Navigator.pop(context),
},
onResendCode: () {
performApiCall(_title, _icon, _flag, sendVerificationFlat);
},
).displayDialog(context);
} catch (ex) {
Utils.hideLoading(context);

@ -16,6 +16,7 @@ import 'package:mohem_flutter_app/ui/marathon/widgets/custom_status_widget.dart'
import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:provider/provider.dart';
import 'package:sizer/sizer.dart';
import 'package:steps_indicator/steps_indicator.dart';
class MarathonScreen extends StatelessWidget {
@ -109,7 +110,7 @@ class _MarathonProgressContainerState extends State<MarathonProgressContainer> {
Container(
decoration: BoxDecoration(
color: MyColors.greenColor,
borderRadius: BorderRadius.circular(12),
borderRadius: BorderRadius.circular(5),
),
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 8),
child: "${widget.provider.currentQuestionNumber.toString()} / ${widget.provider.totalQuestions.toString()} ${LocaleKeys.question.tr()}".toText12(color: MyColors.white),
@ -120,7 +121,7 @@ class _MarathonProgressContainerState extends State<MarathonProgressContainer> {
),
15.height,
StepsIndicator(
lineLength: 21,
lineLength: SizerUtil.deviceType == DeviceType.tablet ? MediaQuery.of(context).size.width * 0.077 : MediaQuery.of(context).size.width * 0.054,
nbSteps: 10,
selectedStep: widget.provider.currentQuestionNumber,
doneLineColor: MyColors.greenColor,
@ -130,6 +131,8 @@ class _MarathonProgressContainerState extends State<MarathonProgressContainer> {
selectedStepSize: 10,
unselectedStepSize: 10,
doneStepSize: 10,
selectedStepBorderSize: 0,
unselectedStepBorderSize: 0,
selectedStepColorIn: MyColors.greenColor,
selectedStepColorOut: MyColors.greenColor,
unselectedStepColorIn: MyColors.lightGreyDeColor,

@ -1,5 +1,6 @@
import 'dart:async';
import 'package:auto_size_text/auto_size_text.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_countdown_timer/current_remaining_time.dart';
@ -13,27 +14,24 @@ class BuildCountdownTimer extends StatelessWidget {
final MarathonProvider provider;
final int screenFlag;
const BuildCountdownTimer({
BuildCountdownTimer({
Key? key,
required this.provider,
required this.timeToMarathon,
required this.screenFlag,
}) : super(key: key);
final TextStyle styleTextHome = const TextStyle(
fontSize: 7,
color: MyColors.greyACColor,
final TextStyle styleTextHome = TextStyle(
color: MyColors.white.withOpacity(0.45),
fontStyle: FontStyle.italic,
fontWeight: FontWeight.w600,
fontWeight: FontWeight.w800,
letterSpacing: -0.4,
);
final TextStyle styleDigitHome = const TextStyle(
height: 23 / 27,
color: MyColors.white,
fontSize: 24,
fontStyle: FontStyle.italic,
fontFamily: "Poppins",
letterSpacing: -1.44,
fontWeight: FontWeight.bold,
);
@ -62,12 +60,16 @@ class BuildCountdownTimer extends StatelessWidget {
children: <Widget>[
Column(
children: <Widget>[
Text(
AutoSizeText(
"00",
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
),
Text(
AutoSizeText(
LocaleKeys.days.tr(),
minFontSize: 7,
maxFontSize: 8,
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
),
],
@ -75,12 +77,16 @@ class BuildCountdownTimer extends StatelessWidget {
buildSeparator(),
Column(
children: <Widget>[
Text(
AutoSizeText(
"00",
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
),
Text(
AutoSizeText(
LocaleKeys.hours.tr(),
minFontSize: 7,
maxFontSize: 8,
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
),
],
@ -88,12 +94,16 @@ class BuildCountdownTimer extends StatelessWidget {
buildSeparator(),
Column(
children: <Widget>[
Text(
AutoSizeText(
"00",
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
),
Text(
AutoSizeText(
LocaleKeys.minutes.tr(),
minFontSize: 7,
maxFontSize: 8,
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
),
],
@ -101,12 +111,16 @@ class BuildCountdownTimer extends StatelessWidget {
buildSeparator(),
Column(
children: <Widget>[
Text(
AutoSizeText(
"00",
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
),
Text(
AutoSizeText(
LocaleKeys.seconds.tr(),
minFontSize: 7,
maxFontSize: 8,
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
),
],
@ -116,8 +130,10 @@ class BuildCountdownTimer extends StatelessWidget {
}
Widget buildSeparator() {
return Text(
return AutoSizeText(
" : ",
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
);
}
@ -140,16 +156,22 @@ class BuildCountdownTimer extends StatelessWidget {
Column(
children: <Widget>[
time.days == null
? Text(
? AutoSizeText(
"00",
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
)
: Text(
: AutoSizeText(
time.days! < 10 ? "0${time.days.toString()}" : time.days.toString(),
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
),
Text(
AutoSizeText(
LocaleKeys.days.tr(),
minFontSize: 7,
maxFontSize: 8,
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
),
],
@ -158,16 +180,22 @@ class BuildCountdownTimer extends StatelessWidget {
Column(
children: <Widget>[
time.hours == null
? Text(
? AutoSizeText(
"00",
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
)
: Text(
: AutoSizeText(
time.hours! < 10 ? "0${time.hours.toString()}" : time.hours.toString(),
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
),
Text(
AutoSizeText(
LocaleKeys.hours.tr(),
minFontSize: 7,
maxFontSize: 8,
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
),
],
@ -176,16 +204,22 @@ class BuildCountdownTimer extends StatelessWidget {
Column(
children: <Widget>[
time.min == null
? Text(
? AutoSizeText(
"00",
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
)
: Text(
: AutoSizeText(
time.min! < 10 ? "0${time.min.toString()}" : time.min.toString(),
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
),
Text(
AutoSizeText(
LocaleKeys.minutes.tr(),
minFontSize: 7,
maxFontSize: 8,
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
),
],
@ -194,16 +228,22 @@ class BuildCountdownTimer extends StatelessWidget {
Column(
children: <Widget>[
time.sec == null
? Text(
? AutoSizeText(
"00",
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
)
: Text(
: AutoSizeText(
time.sec! < 10 ? "0${time.sec.toString()}" : time.sec.toString(),
maxFontSize: 24,
minFontSize: 20,
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
),
Text(
AutoSizeText(
LocaleKeys.seconds.tr(),
minFontSize: 7,
maxFontSize: 8,
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
),
],

@ -23,7 +23,8 @@ class MarathonBanner extends StatelessWidget {
MarathonProvider provider = context.read<MarathonProvider>();
return Container(
decoration: MyDecorations.shadowDecoration,
height: 90,
height: MediaQuery.of(context).size.height * 0.11,
clipBehavior: Clip.antiAlias,
child: Stack(
children: [
Transform(
@ -33,8 +34,20 @@ class MarathonBanner extends StatelessWidget {
),
child: SvgPicture.asset(
"assets/images/marathon_banner_bg.svg",
fit: BoxFit.cover,
width: MediaQuery.of(context).size.width - 40,
fit: BoxFit.fill,
width: double.infinity,
),
),
Positioned(
left: -20,
top: -10,
child: Transform.rotate(
angle: 15,
child: Container(
width: 65,
height: 32,
color: MyColors.darkDigitColor,
),
),
),
SizedBox(
@ -55,7 +68,7 @@ class MarathonBanner extends StatelessWidget {
width: double.infinity,
height: double.infinity,
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.center,
@ -65,21 +78,22 @@ class MarathonBanner extends StatelessWidget {
AppState().isArabic(context) ? 0.height : 5.height,
AutoSizeText(
LocaleKeys.getReadyForContest.tr(),
style: const TextStyle(
minFontSize: 08,
maxFontSize: 11,
style: TextStyle(
fontStyle: FontStyle.italic,
fontSize: 12,
fontWeight: FontWeight.w600,
color: MyColors.lightGreyEFColor,
color: MyColors.white.withOpacity(0.83),
letterSpacing: -0.4,
),
),
const AutoSizeText(
AutoSizeText(
"Saudi Arabia",
style: TextStyle(
fontStyle: FontStyle.italic,
fontSize: 19,
fontWeight: FontWeight.bold,
color: MyColors.lightGreyEFColor,
color: MyColors.white.withOpacity(0.83),
height: 32 / 22,
),
),
@ -91,16 +105,54 @@ class MarathonBanner extends StatelessWidget {
),
],
).paddingOnly(
left: AppState().isArabic(context) ? 12 : 0,
right: AppState().isArabic(context) ? 0 : 12,
left: AppState().isArabic(context) ? 12 : 3,
right: AppState().isArabic(context) ? 3 : 12,
)
],
).paddingOnly(right: 20),
),
),
),
],
),
),
Align(
alignment: Alignment.topLeft,
child: SizedBox(
height: 20,
width: 35,
child: Transform.rotate(
angle: -math.pi / 4.5,
child: Text(
LocaleKeys.brainMarathon.tr(),
textAlign: TextAlign.center,
maxLines: 2,
style: const TextStyle(
color: MyColors.kWhiteColor,
fontWeight: FontWeight.bold,
fontSize: 6,
height: 1.2,
),
),
),
),
).paddingOnly(top: 5),
!AppState().isArabic(context)
? Positioned(
right: 0,
bottom: 0,
child: RotatedBox(
quarterTurns: 4,
child: SvgPicture.asset("assets/images/arrow_next.svg", color: MyColors.darkDigitColor),
).paddingAll(15),
)
: Positioned(
bottom: 0,
left: 0,
child: RotatedBox(
quarterTurns: 2,
child: SvgPicture.asset("assets/images/arrow_next.svg", color: MyColors.darkDigitColor),
).paddingAll(15),
),
],
).onPress(
() => Navigator.pushNamed(context, AppRoutes.marathonIntroScreen),

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/decorations_helper.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/models/marathon_question_model.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:provider/provider.dart';
@ -48,7 +49,7 @@ class _QuestionCardState extends State<QuestionCard> {
Widget build(BuildContext context) {
return CupertinoPageScaffold(
child: SizedBox(
height: 420,
height: 440,
width: double.infinity,
child: Consumer<MarathonProvider>(
builder: (BuildContext context, MarathonProvider provider, _) {
@ -200,8 +201,6 @@ class _AnswerContentState extends State<AnswerContent> {
updateOption(0, true);
},
child: Container(
height: 60,
width: MediaQuery.of(context).size.width - 75,
alignment: Alignment.centerLeft,
decoration: getContainerColor(0),
child: Center(
@ -212,7 +211,7 @@ class _AnswerContentState extends State<AnswerContent> {
fontWeight: FontWeight.w600,
fontSize: 16,
),
),
).paddingOnly(top: 17, bottom: 17),
),
),
),
@ -231,8 +230,6 @@ class _AnswerContentState extends State<AnswerContent> {
updateOption(1, true);
},
child: Container(
height: 60,
width: MediaQuery.of(context).size.width - 75,
alignment: Alignment.centerLeft,
decoration: getContainerColor(1),
child: Center(
@ -243,7 +240,7 @@ class _AnswerContentState extends State<AnswerContent> {
fontWeight: FontWeight.w600,
fontSize: 16,
),
),
).paddingOnly(top: 17, bottom: 17),
),
),
),
@ -262,8 +259,6 @@ class _AnswerContentState extends State<AnswerContent> {
updateOption(2, true);
},
child: Container(
height: 60,
width: MediaQuery.of(context).size.width - 75,
alignment: Alignment.centerLeft,
decoration: getContainerColor(2),
child: Center(
@ -274,7 +269,7 @@ class _AnswerContentState extends State<AnswerContent> {
fontWeight: FontWeight.w600,
fontSize: 16,
),
),
).paddingOnly(top: 17, bottom: 17),
),
),
),
@ -293,8 +288,6 @@ class _AnswerContentState extends State<AnswerContent> {
updateOption(3, true);
},
child: Container(
height: 60,
width: MediaQuery.of(context).size.width - 75,
alignment: Alignment.centerLeft,
decoration: getContainerColor(3),
child: Center(
@ -305,7 +298,7 @@ class _AnswerContentState extends State<AnswerContent> {
fontWeight: FontWeight.w600,
fontSize: 16,
),
),
).paddingOnly(top: 17, bottom: 17),
),
),
),

@ -68,7 +68,7 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
}
void submitRequest() async {
try {
// try {
Utils.showLoading(context);
List<Map<String, dynamic>> list = [];
if (attachmentFiles.isNotEmpty) {
@ -97,7 +97,7 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
);
} else if (params!.approvalFlag == 'address') {
await ProfileApiClient().startAddressApprovalProcess(
"SUBMIT",
LocaleKeys.submit.tr(),
comments.text,
params!.pItemId,
params!.transactionId,
@ -111,7 +111,7 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
);
} else if (params!.approvalFlag == 'basicDetails') {
await ProfileApiClient().startBasicDetailsApprovalProcess(
"SUBMIT",
LocaleKeys.submit.tr(),
comments.text,
params!.pItemId,
params!.transactionId,
@ -131,6 +131,7 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
);
}else if (params!.approvalFlag == 'endEmployment') {
await TerminationDffApiClient().startTermApprovalProcess(
// "SUBMIT",
LocaleKeys.submit.tr(),
comments.text,
params!.pItemId,
@ -142,10 +143,10 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
Utils.showToast(LocaleKeys.yourRequestHasBeenSubmittedForApprovals.tr(), longDuration: true);
Navigator.of(context).popUntil((route) => route.settings.name == AppRoutes.dashboard);
Navigator.pushNamed(context, AppRoutes.workList);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
// } catch (ex) {
// Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
// }
}
@override

@ -48,6 +48,17 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
descFlexConTextTitle = genericResponseModel!.pDESCFLEXCONTEXTNAME ?? "";
getEitDffStructureList = genericResponseModel?.getEITDFFStructureList ?? [];
//getEitDffStructureList = getEitDffStructureList!.where((element) => element.dISPLAYFLAG != "N").toList();
if (dynamicParams!.collectionNotificationList != null && dynamicParams!.collectionNotificationList!.isNotEmpty) {
getEitDffStructureList!.forEach((element) {
dynamicParams!.collectionNotificationList!.forEach((element2) {
if (element.sEGMENTNAME == element2.segmentName) {
element.fieldAnswer = element2.varchar2Value;
element.eSERVICESDV ??= ESERVICESDV();
element.eSERVICESDV!.pIDCOLUMNNAME = element2.varchar2Value;
}
});
});
}
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
@ -57,7 +68,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
}
void validateTransaction() async {
try {
// try {
Utils.showLoading(context);
List<Map<String, dynamic>> values = getEitDffStructureList!.map((e) {
String tempVar = e.eSERVICESDV?.pIDCOLUMNNAME ?? "";
@ -91,6 +102,11 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_OBJECT_VERSION_NUMBER", nUMBERVALUE: 0, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: null).toJson());
genericResponseModel = await MyAttendanceApiClient().validateEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values);
if (dynamicParams!.collectionNotificationList != null && dynamicParams!.collectionNotificationList!.isNotEmpty) {
Utils.hideLoading(context);
Navigator.pop(context, values);
return;
}
SubmitEITTransactionList submitEITTransactionList = await MyAttendanceApiClient().submitEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values);
Utils.hideLoading(context);
await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
@ -98,10 +114,10 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(submitEITTransactionList.pTRANSACTIONID!);
Utils.hideLoading(context);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
// } catch (ex) {
// Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
// }
}
String dESCFLEXCONTEXTCODE = "";
@ -110,19 +126,42 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
Future calGetValueSetValues(GetEITDFFStructureList structureList) async {
try {
Utils.showLoading(context);
List<Map<String, dynamic>> values = [];
String segmentId = structureList.cHILDSEGMENTSVS!;
if (dESCFLEXCONTEXTCODE.isEmpty) dESCFLEXCONTEXTCODE = structureList.dESCFLEXCONTEXTCODE!;
List<GetEITDFFStructureList> filteredList = getEitDffStructureList?.where((element) => element.cHILDSEGMENTSVSSplited!.contains(segmentId)).toList() ?? [];
List<Map<String, dynamic>> values = filteredList
if (filteredList.isEmpty && structureList.cHILDSEGMENTSVSSplited!.isNotEmpty) {
segmentId = structureList.cHILDSEGMENTSVSSplited![0];
filteredList = getEitDffStructureList?.where((element) => element.cHILDSEGMENTSVSSplited!.contains(segmentId)).toList() ?? [];
}
values = filteredList
.map((e) => GetSetValuesRequestModel(
sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME)
.toJson())
.toList();
// if (parentValue.isNotEmpty && (structureList.vALIDATIONTYPE == "F")) {
// values = getDependenciesParams(parentValue);
// }
// if (structureList.pARENTSEGMENTSVSSplitedVS!.isNotEmpty) {
// structureList.pARENTSEGMENTSVSSplitedVS!.forEach((element2) {
// filteredList = getEitDffStructureList?.where((element) => element.sEGMENTNAME == element2.name).toList() ?? [];
// values = filteredList
// .map((e) => GetSetValuesRequestModel(
// sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME)
// .toJson())
// .toList();
// });
// List<GetEITDFFStructureList> filteredList2 = getEitDffStructureList?.where((element) => element.fLEXVALUESETNAME == structureList.fLEXVALUESETNAME).toList() ?? [];
// }
List<ESERVICESVS> eServicesResponseModel = await MyAttendanceApiClient().getValueSetValues(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values);
List<GetEITDFFStructureList> abc = genericResponseModel?.getEITDFFStructureList ?? [];
getEitDffStructureList = abc;
int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == structureList.cHILDSEGMENTSVS);
int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId);
getEitDffStructureList![index].eSERVICESVS!.clear();
if (eServicesResponseModel.isNotEmpty) getEitDffStructureList![index].eSERVICESVS!.addAll(eServicesResponseModel);
// getEitDffStructureList = genericResponseModel?.getEITDFFStructureList ?? [];
@ -136,7 +175,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
}
Future getDefaultValues(GetEITDFFStructureList structureList) async {
try {
// try {
Utils.showLoading(context);
for (int i = 0; i < (structureList.cHILDSEGMENTSDVSplited?.length ?? 0); i++) {
String segmentId = structureList.cHILDSEGMENTSDVSplited![i];
@ -158,15 +197,34 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, getSetList);
int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId);
getEitDffStructureList![index].eSERVICESDV = defaultValue;
GetEITDFFStructureList defaultValueCheck = getEitDffStructureList!.where((GetEITDFFStructureList element) => element.sEGMENTNAME == segmentId).toList().first;
if (defaultValueCheck.cHILDSEGMENTSDVSplited!.isNotEmpty && defaultValueCheck.rEADONLY == 'Y') {
getDefaultValues(defaultValueCheck);
Utils.hideLoading(context);
// GetEITDFFStructureList? parent = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId);
// List<Map<String, dynamic>> getSetList = getDefaultValuesIonicLogic(parent);
// ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, defaultValueCheck.dESCFLEXCONTEXTCODE!, defaultValueCheck.dESCFLEXNAME!, getSetList);
// int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId);
// getEitDffStructureList![index].eSERVICESDV = defaultValue;
} else if (defaultValueCheck.cHILDSEGMENTSVSSplited!.isNotEmpty && defaultValueCheck.rEADONLY == 'Y') {
calGetValueSetValues(defaultValueCheck);
Utils.hideLoading(context);
}
} else if (values.isNotEmpty) {
ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values);
int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId);
getEitDffStructureList![index].eSERVICESDV = defaultValue;
}
}
await Future.delayed(const Duration(seconds: 1));
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
// } catch (ex) {
// Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
// }
}
// List<Map<String, dynamic>> calGetValueSetValuesIonicLogic(GetEITDFFStructureList structureElement) {
@ -180,79 +238,79 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
// }
List<Map<String, dynamic>> getDefaultValuesIonicLogic(GetEITDFFStructureList structureElement) {
try {
List<PARENTSEGMENTSVSSplitedVS> parentValue = structureElement.pARENTSEGMENTSVSSplitedVS ?? [];
List<PARENTSEGMENTSDVSplited> parentsList = structureElement.pARENTSEGMENTSDVSplited ?? [];
List<Map<String, dynamic>> dependenciesList = [];
String? parentVal;
bool isStandardDate = false;
bool isStandardTimeDate = false;
bool isStandardTime = false;
bool isHidden = false;
bool isReadOnlyList = false;
bool isSelectElement = false;
// isStandardDate = this.isStandardDate(obj);
// isStandardTimeDate = this.isStandardDateTime(obj);
// isStandardTime = this.isStandardTime(obj);
if (structureElement.dISPLAYFLAG == "N") isHidden = true;
if (structureElement.vALIDATIONTYPE != "N" && structureElement.rEADONLY == "Y") {
isReadOnlyList = true;
}
if (structureElement.vALIDATIONTYPE != "N" && structureElement.rEADONLY == "N") {
isSelectElement = true;
}
//try {
List<PARENTSEGMENTSVSSplitedVS> parentValue = structureElement.pARENTSEGMENTSVSSplitedVS ?? [];
List<PARENTSEGMENTSDVSplited> parentsList = structureElement.pARENTSEGMENTSDVSplited ?? [];
List<Map<String, dynamic>> dependenciesList = [];
String? parentVal;
bool isStandardDate = false;
bool isStandardTimeDate = false;
bool isStandardTime = false;
bool isHidden = false;
bool isReadOnlyList = false;
bool isSelectElement = false;
// isStandardDate = this.isStandardDate(obj);
// isStandardTimeDate = this.isStandardDateTime(obj);
// isStandardTime = this.isStandardTime(obj);
if (structureElement.dISPLAYFLAG == "N") isHidden = true;
if (structureElement.vALIDATIONTYPE != "N" && structureElement.rEADONLY == "Y") {
isReadOnlyList = true;
}
if (structureElement.vALIDATIONTYPE != "N" && structureElement.rEADONLY == "N") {
isSelectElement = true;
}
if (parentValue.isNotEmpty && (structureElement.vALIDATIONTYPE == "D" || structureElement.vALIDATIONTYPE == "Y")) {
List parValue = getDependenciesParams(parentValue);
if (parentValue.isNotEmpty && (structureElement.vALIDATIONTYPE == "D" || structureElement.vALIDATIONTYPE == "Y")) {
List parValue = getDependenciesParams(parentValue);
if (parValue.isNotEmpty) {
parentVal = parValue.first.ID_COLUMN_NAME;
}
if (parValue.isNotEmpty) {
parentVal = parValue.first.ID_COLUMN_NAME;
}
if (parentVal == null) {
return [];
}
if (parentVal == null) {
return [];
}
if (parentsList.isNotEmpty) {
if (parentValue.isNotEmpty) {
parentsList = parentsList + parentValue.map((e) => PARENTSEGMENTSDVSplited.fromJson(e.toJson())).toList();
// parentsList.addAll(parentValue.map((e) => PARENTSEGMENTSDVSplited.fromJson(e.toJson())));
// parentsList.concat(parentValue);
}
dependenciesList = getDependenciesParams(parentsList);
}
if (parentsList.isNotEmpty) {
if (parentValue.isNotEmpty) {
parentsList = parentsList + parentValue.map((e) => PARENTSEGMENTSDVSplited.fromJson(e.toJson())).toList();
// parentsList.addAll(parentValue.map((e) => PARENTSEGMENTSDVSplited.fromJson(e.toJson())));
// parentsList.concat(parentValue);
}
return dependenciesList;
// for (int i = 0; i < (structureList.cHILDSEGMENTSDVSplited?.length ?? 0); i++) {
// String segmentId = structureList.cHILDSEGMENTSDVSplited![i];
// print("segmentId:$segmentId");
// print("segmentName:${structureList.sEGMENTNAME}");
// GetEITDFFStructureList? parent = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId);
// List<PARENTSEGMENTSDVSplited> parentDvRequired = parent.pARENTSEGMENTSDVSplited ?? [];
// List<PARENTSEGMENTSVSSplitedVS> parentVsRequired = parent.pARENTSEGMENTSVSSplitedVS ?? [];
//
// List<GetEITDFFStructureList> filteredList =
// getEitDffStructureList!.where((outerElement) => parentDvRequired.any((element) => outerElement.sEGMENTNAME == element.name && element.isRequired == "REQUIRED")).toList();
//
// List<Map<String, dynamic>> values = filteredList
// .map((e) => GetSetValuesRequestModel(
// sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME)
// .toJson())
// .toList();
// print("values:$values");
//
// ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values);
// int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId);
// getEitDffStructureList![index].eSERVICESDV = defaultValue;
// }
// Utils.hideLoading(context);
// setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
return [];
dependenciesList = getDependenciesParams(parentsList);
}
return dependenciesList;
// for (int i = 0; i < (structureList.cHILDSEGMENTSDVSplited?.length ?? 0); i++) {
// String segmentId = structureList.cHILDSEGMENTSDVSplited![i];
// print("segmentId:$segmentId");
// print("segmentName:${structureList.sEGMENTNAME}");
// GetEITDFFStructureList? parent = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId);
// List<PARENTSEGMENTSDVSplited> parentDvRequired = parent.pARENTSEGMENTSDVSplited ?? [];
// List<PARENTSEGMENTSVSSplitedVS> parentVsRequired = parent.pARENTSEGMENTSVSSplitedVS ?? [];
//
// List<GetEITDFFStructureList> filteredList =
// getEitDffStructureList!.where((outerElement) => parentDvRequired.any((element) => outerElement.sEGMENTNAME == element.name && element.isRequired == "REQUIRED")).toList();
//
// List<Map<String, dynamic>> values = filteredList
// .map((e) => GetSetValuesRequestModel(
// sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME)
// .toJson())
// .toList();
// print("values:$values");
//
// ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values);
// int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId);
// getEitDffStructureList![index].eSERVICESDV = defaultValue;
// }
// Utils.hideLoading(context);
// setState(() {});
// } catch (ex) {
// Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
// return [];
// }
}
List<Map<String, dynamic>> getDependenciesParams(parentsList) {
@ -260,7 +318,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
for (int i = 0; i < parentsList.length; i++) {
for (int j = 0; j < (getEitDffStructureList?.length ?? 0); j++) {
if (getEitDffStructureList![j].sEGMENTNAME == parentsList[i].name) {
if (getEitDffStructureList![j].sEGMENTNAME == parentsList[i]?.name) {
if (getEitDffStructureList![j].dISPLAYFLAG != "N") {
if (getEitDffStructureList![j].vALIDATIONTYPE == "N") {
String? idColName;
@ -340,7 +398,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
String? text = data?.pVALUECOLUMNNAME;
String? val = data?.pIDCOLUMNNAME;
if ((val ?? "").isEmpty && parentsList[i].IsRequired == "REQUIRED") {
if ((val ?? "").isEmpty && parentsList[i].isRequired == "REQUIRED") {
//alert(parentsList[i].Name +" Is required");
return [];
} else {}
@ -362,7 +420,8 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
String? text = data?.pVALUECOLUMNNAME;
String? val = data?.pIDCOLUMNNAME;
if ((val ?? "").isEmpty && parentsList[i].IsRequired == "REQUIRED") {
///
if ((val ?? "").isEmpty && parentsList[i].isRequired == "REQUIRED") {
//alert(parentsList[i].Name +" Is required");
return [];
} else {}
@ -448,13 +507,18 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
return DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
model.eSERVICESDV?.pIDCOLUMNNAME ?? "",
isReadOnly: model.rEADONLY == "Y",
// isReadOnly: model.rEADONLY == "Y",
isInputTypeNum: true,
onChange: (text) {
model.fieldAnswer = text;
model.eSERVICESDV ??= ESERVICESDV();
model.eSERVICESDV!.pIDCOLUMNNAME = text;
},
onTap: () async {
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
await getDefaultValues(model);
}
},
).paddingOnly(bottom: 12);
} else if (model.fORMATTYPE == "X") {
String displayText = model.eSERVICESDV?.pIDCOLUMNNAME ?? (getEitDffStructureList![index].fieldAnswer ?? "");

@ -6,6 +6,7 @@ import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/balances_dashboard_widget.dart';
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
@ -16,8 +17,10 @@ class DynamicListViewParams {
String uRL;
String requestID;
String colsURL;
bool isUpdate;
List<CollectionNotificationEit>? collectionNotificationList;
DynamicListViewParams(this.title, this.dynamicId, {this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = ''});
DynamicListViewParams(this.title, this.dynamicId, {this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = '', this.isUpdate = false, this.collectionNotificationList});
}
class DynamicListViewScreen extends StatefulWidget {
@ -62,6 +65,17 @@ class _DynamicListViewScreenState extends State<DynamicListViewScreen> {
late bool isTicketRequest;
List<Widget> getEITWidgetsList(List<CollectionTransaction>? collectionTransaction) {
List<Widget> itemsList = [];
for (int t = 0; t < (collectionTransaction ?? []).length; t++) {
if (collectionTransaction![t].dISPLAYFLAG == "Y") {
itemsList.add(ItemDetailViewCol(collectionTransaction[t].sEGMENTPROMPT!, collectionTransaction[t].sEGMENTVALUEDSP ?? ""));
}
}
return itemsList;
}
@override
Widget build(BuildContext context) {
if (dynamicParams == null) {
@ -84,16 +98,45 @@ class _DynamicListViewScreenState extends State<DynamicListViewScreen> {
shrinkWrap: true,
itemBuilder: (cxt, int parentIndex) => getEITTransactionList![parentIndex].collectionTransaction!.isEmpty
? const SizedBox()
: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
for (int t = 0; t < (getEITTransactionList![parentIndex].collectionTransaction ?? []).length; t++)
if (getEITTransactionList![parentIndex].collectionTransaction![t].dISPLAYFLAG == "Y")
ItemDetailView(getEITTransactionList![parentIndex].collectionTransaction![t].sEGMENTPROMPT!,
getEITTransactionList![parentIndex].collectionTransaction![t].sEGMENTVALUEDSP ?? ""),
],
: GridView(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 1.9 / 0.75),
padding: const EdgeInsets.all(12.0),
shrinkWrap: true,
primary: false,
physics: const ScrollPhysics(),
children: getEITWidgetsList(getEITTransactionList![parentIndex].collectionTransaction),
).objectContainerView(),
// Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisSize: MainAxisSize.min,
// children: [
// for (int t = 0; t < (getEITTransactionList![parentIndex].collectionTransaction ?? []).length; t++)
// if (getEITTransactionList![parentIndex].collectionTransaction![t].dISPLAYFLAG == "Y")
// // ItemDetailView(getEITTransactionList![parentIndex].collectionTransaction![t].sEGMENTPROMPT!,
// // getEITTransactionList![parentIndex].collectionTransaction![t].sEGMENTVALUEDSP ?? ""),
// // GridView(
// // gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
// // padding: const EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 12),
// // shrinkWrap: true,
// // primary: false,
// // physics: const ScrollPhysics(),
// // children: getEITWidgetsList(getEITTransactionList![parentIndex].collectionTransaction),
// // )
// // ItemDetailViewCol(getEITTransactionList![parentIndex].collectionTransaction![t].sEGMENTPROMPT!,
// // getEITTransactionList![parentIndex].collectionTransaction![t].sEGMENTVALUEDSP ?? ""),
//
// // GridView(
// // gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
// // padding: const EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 12),
// // shrinkWrap: true,
// // primary: false,
// // physics: const ScrollPhysics(),
// // children: getEITWidgetsList(getEITTransactionList![parentIndex].collectionTransaction),
// // )
// // ItemDetailView(getEITTransactionList![parentIndex].collectionTransaction![t].sEGMENTPROMPT!,
// // getEITTransactionList![parentIndex].collectionTransaction![t].sEGMENTVALUEDSP ?? ""),
// ],
// ).objectContainerView(),
separatorBuilder: (cxt, index) => 12.height,
itemCount: getEITTransactionList!.length)),
],

@ -256,19 +256,29 @@ class _EmployeeDetailsState extends State<EmployeeDetails> {
child: Column(
children: [
Text(LocaleKeys.addFavoriteList).tr(namedArgs: {'name': '${getEmployeeSubordinates!.eMPLOYEENAME}'}),
Image.memory(
Utils.getPostBytes(
getEmployeeSubordinates!.eMPLOYEEIMAGE ?? "",
),
errorBuilder: (BuildContext context, error, stackTrace) {
return SvgPicture.asset(
"assets/images/user.svg", height: 50, width: 50,
);
},
width: 50,
height: 50,
fit: BoxFit.cover,
).circle(50).paddingOnly(top: 21),
getEmployeeSubordinates!.eMPLOYEEIMAGE == null
? SvgPicture.asset(
"assets/images/user.svg",
height: 68,
width: 68,)
: CircleAvatar(
radius: 68,
backgroundImage: MemoryImage(Utils.dataFromBase64String(getEmployeeSubordinates!.eMPLOYEEIMAGE!)),
backgroundColor: Colors.black,
),
// Image.memory(
// Utils.getPostBytes(
// getEmployeeSubordinates!.eMPLOYEEIMAGE ?? "",
// ),
// errorBuilder: (BuildContext context, error, stackTrace) {
// return SvgPicture.asset(
// "assets/images/user.svg", height: 50, width: 50,
// );
// },
// width: 50,
// height: 50,
// fit: BoxFit.cover,
// ).circle(50).paddingOnly(top: 21),
],
),
),

@ -283,7 +283,6 @@ class _ViewAttendanceState extends State<ViewAttendance> {
cellBorderColor: Colors.white,
selectionDecoration: BoxDecoration(
border: Border.all(color: MyColors.white, width: 10),
borderRadius: const BorderRadius.all(Radius.circular(100)),
shape: BoxShape.circle,
),
dataSource: MeetingDataSource(_getDataSource()),

@ -224,8 +224,8 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
onTap: () async {
DateTime dateValue = await _selectDate(context);
//date = DateFormat('yyyy/MM/dd').format(dateValue);
date = "2022-10-23T09:17:38.653+03:00";
// date = (DateFormat('yyyy-MM-dd').format(dateValue)+"T"+ dateTime.toString() + dateTime1.toString());
//date = "2022-10-23T09:17:38.653+03:00";
date = (DateFormat('yyyy-MM-dd').format(dateValue));
model!.getContactDetailsList!.sEGMENTVALUEDSP = date;
print(dateTime);
print(dateTime1);
@ -288,7 +288,7 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
isEnable: false,
onTap: () async {
DateTime dateValue = await _selectDate(context);
date = "2022-10-23T09:17:38.653+03:00";
date = (DateFormat('yyyy-MM-dd').format(dateValue));
// date = (DateFormat('yyyy-MM-dd').format(dateValue) +"T"+ dateTime.toString() + dateTime1.toString());
// date = DateFormat('yyyy/MM/dd').format(dateValue);
model!.getContactDetailsList!.sEGMENTVALUEDSP = date;
@ -349,8 +349,8 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
isEnable: false,
onTap: () async {
DateTime dateValue = await _selectDate(context);
date = "2022-10-23T09:17:38.653+03:00";
// date = (DateFormat('yyyy-MM-dd').format(dateValue)+"T"+ dateTime.toString() + dateTime1.toString());
// date = "2022-10-23T09:17:38.653+03:00";
date = (DateFormat('yyyy-MM-dd').format(dateValue));
// date = DateFormat('yyyy/MM/dd').format(dateValue);
model!.getContactDetailsList!.sEGMENTVALUEDSP = date;
setState(() {});
@ -392,78 +392,91 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
}
void submitUpdateForm() async {
try {
List<Map<String, dynamic>> values1 = getBasicDetDffStructureList!.map((e) {
String? dateVal = '';
String? vatcherVal = '';
int? numberVal;
if (e!.fORMATTYPE == 'N') {
dateVal = null;
vatcherVal = null;
numberVal = int.parse(e.getContactDetailsList!.sEGMENTVALUEDSP??"0");
} else if (e.fORMATTYPE == 'X') {
dateVal = e!.getContactDetailsList!.sEGMENTVALUEDSP.toString();
vatcherVal = null;
numberVal = null;
} else {
dateVal = null;
vatcherVal = e!.getContactDetailsList!.sEGMENTVALUEDSP;
numberVal = null;
}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson();
}).toList();
List<Map<String, dynamic>> values2 = getContactDffStructureList!.map((e) {
String? dateVal = '';
String? vatcherVal = '';
int? numberVal;
if (e!.fORMATTYPE == 'N') {
dateVal = null;
vatcherVal = null;
numberVal = int.parse(e.getContactDetailsList!.sEGMENTVALUEDSP??"0");
} else if (e.fORMATTYPE == 'X') {
dateVal = e!.getContactDetailsList!.sEGMENTVALUEDSP;
vatcherVal = null;
numberVal = null;
} else {
dateVal = null;
numberVal = null;
vatcherVal = e!.getContactDetailsList!.sEGMENTVALUEDSP;
}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson();
}).toList();
List<Map<String, dynamic>> values3 = getContactColsStructureList!.map((e) {
// String tempVar = e!.getContactDetailsList!.sEGMENTVALUEDSP ?? "";
String? dateVal = '';
String? vatcherVal = '';
int? numberVal;
print("submit");
try {
List<Map<String, dynamic>> values1 = getBasicDetDffStructureList!.map((e) {
String? dateVal = '';
String? varChar = '';
int? numberVal;
if (e!.fORMATTYPE == 'N') {
dateVal = null;
varChar = null;
numberVal = int.parse(e.getContactDetailsList!.sEGMENTVALUEDSP ?? "0");
} else if (e.fORMATTYPE == 'X') {
dateVal = e!.getContactDetailsList!.sEGMENTVALUEDSP.toString();
varChar = null;
numberVal = null;
} else if (e.eSERVICESVS!.isNotEmpty) {
dateVal = null;
varChar = e!.getContactDetailsList!.vARCHAR2VALUE;
numberVal = null;
} else {
dateVal = null;
varChar = e!.getContactDetailsList!.sEGMENTVALUEDSP;
numberVal = null;
}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: varChar).toJson();
}).toList();
List<Map<String, dynamic>> values2 = getContactDffStructureList!.map((e) {
String? dateVal = '';
String? varChar = '';
int? numberVal;
if (e!.fORMATTYPE == 'N') {
dateVal = null;
varChar = null;
numberVal = int.parse(e.getContactDetailsList!.sEGMENTVALUEDSP ?? "0");
} else if (e.fORMATTYPE == 'X') {
dateVal = e!.getContactDetailsList!.dATEVALUE;
varChar = null;
numberVal = null;
} else if (e.eSERVICESVS!.isNotEmpty) {
dateVal = null;
varChar = e!.getContactDetailsList!.vARCHAR2VALUE;
numberVal = null;
} else {
dateVal = null;
numberVal = null;
varChar = e!.getContactDetailsList!.sEGMENTVALUEDSP;
}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: varChar).toJson();
}).toList();
List<Map<String, dynamic>> values3 = getContactColsStructureList!.map((e) {
// String tempVar = e!.getContactDetailsList!.sEGMENTVALUEDSP ?? "";
String? dateVal = '';
dynamic? varChar1 = '';
int? numberVal;
print("e.dATATYPE:${e?.dATATYPE}");
if (e!.dATATYPE == 'VARCHAR2') {
dateVal = null;
numberVal = null;
vatcherVal = e.getContactDetailsList?.sEGMENTVALUEDSP ?? "";
} else if (e.dATATYPE == 'DATE') {
dateVal = e.getContactDetailsList!.sEGMENTVALUEDSP.toString();
print("dateVal:${dateVal ?? ""}");
vatcherVal = null;
numberVal = null;
} else if (e.dATATYPE == 'NUMBER') {
dateVal = null;
vatcherVal = null;
numberVal = int.parse(e.getContactDetailsList!.sEGMENTVALUEDSP??"0");
} else {}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal).toJson();
}).toList();
List<Map<String, dynamic>> valuesFinal = [...values1, ...values2, ...values3];
Utils.showLoading(context);
submitContactTransactionList = await ProfileApiClient().submitContactTransactionAddAndUpdate(args['actionType'], args['relationID'] ?? null, valuesFinal);
var transactionId = submitContactTransactionList!.pTRANSACTIONID;
var itemKey = submitContactTransactionList!.pITEMKEY;
Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), transactionId!.toInt(), itemKey.toString(), 'family_member'));
setState(() {});
print("e.dATATYPE:${e?.dATATYPE}");
if (e!.dATATYPE == 'VARCHAR2') {
dateVal = null;
numberVal = null;
if (e.objectValuesList != null && e.objectValuesList!.isNotEmpty) {
varChar1 = e.getContactDetailsList?.vARCHAR2VALUE ?? "";
} else {
varChar1 = e.getContactDetailsList?.sEGMENTVALUEDSP ?? "";
}
} else if (e.dATATYPE == 'DATE') {
dateVal = e.getContactDetailsList!.sEGMENTVALUEDSP.toString();
varChar1 = null;
numberVal = null;
} else if (e.dATATYPE == 'NUMBER') {
dateVal = null;
varChar1 = null;
numberVal = int.parse(e.getContactDetailsList!.sEGMENTVALUEDSP ?? "0");
}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: varChar1).toJson();
}).toList();
List<Map<String, dynamic>> valuesFinal = [...values1, ...values2, ...values3];
Utils.showLoading(context);
submitContactTransactionList = await ProfileApiClient().submitContactTransactionAddAndUpdate(args['actionType'], args['relationID'] ?? null, valuesFinal);
var transactionId = submitContactTransactionList!.pTRANSACTIONID;
var itemKey = submitContactTransactionList!.pITEMKEY;
Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), transactionId!.toInt(), itemKey.toString(), 'family_member'));
setState(() {});
} catch (ex) {
print(ex);
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}

@ -129,7 +129,12 @@ class _ContactDetailsState extends State<ContactDetails> {
separatorBuilder: (cxt, index) => 12.height,
itemCount: getEmployeeAddressList.length),
if (menuEntriesAddress.updateButton == 'Y')
Positioned(
AppState().isArabic(context)? Positioned(
top: 1,
left: 1,
child: const Icon(Icons.edit_location_alt_outlined, size: 20).onPress(addUpdateAddress),
)
:Positioned(
top: 1,
right: 1,
child: const Icon(Icons.edit_location_alt_outlined, size: 20).onPress(addUpdateAddress),

@ -88,7 +88,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreenAddress> {
getAddressDffStructureList!
.insert(1, GetAddressDffStructureList(fORMATTYPE: 'C', sEGMENTPROMPT: LocaleKeys.profile_country.tr(), eSERVICESVS: eSerivceList, getEmployeeAddressList: GetEmployeeAddressList()));
}
print(getAddressDffStructureList);
// genericResponseModel = await ProfileApiClient().getColStructure(dynamicParams!.dynamicId, 'GET_BASIC_DET_COLS_STRUCTURE', dynamicParams!.requestID);
// getBasicDetColsStructureList = genericResponseModel?.getBasicDetColsStructureList ?? [];
// getBasicDetColsStructureList?.forEach((element) {
@ -266,16 +266,15 @@ class _DynamicInputScreenState extends State<DynamicInputScreenAddress> {
if (e.fORMATTYPE == "X") {
// for date format type, date format is changed
tempVar = e.eSERVICESDV?.pVALUECOLUMNNAME ?? "";
if (tempVar.isNotEmpty) {
DateTime date = DateFormat('yyyy-MM-dd').parse(tempVar);
tempVar = DateFormat('dd/MMM/yyy').format(date);
tempVar = DateFormat('dd-MMM-yyy').format(date);
if (e.aPPLICATIONCOLUMNNAME == null) {
effectiveDate = tempVar;
}
}
} else if (e.eSERVICESVS?.isNotEmpty ?? false) {
tempVar = e.getEmployeeAddressList!.vARCHAR2VALUE!;
tempVar = e.getEmployeeAddressList!.vARCHAR2VALUE ?? "";
if (e.aPPLICATIONCOLUMNNAME == null) {
countryCode = tempVar;
}

@ -1,4 +1,5 @@
import 'dart:convert';
import 'dart:io';
import 'dart:ui';
import 'package:easy_localization/easy_localization.dart';
@ -16,6 +17,7 @@ import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart';
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
import 'package:mohem_flutter_app/ui/profile/widgets/profile_panel.dart';
import 'package:mohem_flutter_app/widgets/bottom_sheet.dart';
import 'package:mohem_flutter_app/widgets/image_picker.dart';
class ProfileScreen extends StatefulWidget {
const ProfileScreen({Key? key}) : super(key: key);
@ -28,6 +30,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
late MemberInformationListModel memberInformationList;
final ImagePicker _picker = ImagePicker();
List<GetEmployeeBasicDetailsList> getEmployeeBasicDetailsList = [];
List<String> images = [];
@override
void initState() {
@ -46,24 +49,25 @@ class _ProfileScreenState extends State<ProfileScreen> {
children: [
memberInformationList!.eMPLOYEEIMAGE != null
? Container(
height: 300,
margin: const EdgeInsets.only(top: 50),
decoration: BoxDecoration(
image: DecorationImage(
image: MemoryImage(
Utils.dataFromBase64String(memberInformationList.eMPLOYEEIMAGE!),
height: 300,
margin: const EdgeInsets.only(top: 50),
decoration: BoxDecoration(
image: DecorationImage(
image: MemoryImage(
Utils.dataFromBase64String(memberInformationList.eMPLOYEEIMAGE!),
),
fit: BoxFit.cover),
),
fit: BoxFit.cover),
),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
child: Container(
color: Colors.white.withOpacity(0.0),
),
),
): Container(
decoration: BoxDecoration(color: Colors.white.withOpacity(0.0)),
),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
child: Container(
color: Colors.white.withOpacity(0.0),
),
),
)
: Container(
decoration: BoxDecoration(color: Colors.white.withOpacity(0.0)),
),
SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
@ -83,7 +87,14 @@ class _ProfileScreenState extends State<ProfileScreen> {
),
InkWell(
onTap: () {
startImageSheet();
// startImageSheet();
ImageOptions.showImageOptionsNew(context, false, (String image, File file) {
setState(() {
// images.add(image);
Navigator.of(context).pop();
openGallery(image);
});
});
},
child: Container(
padding: const EdgeInsets.only(left: 17, right: 17, top: 8, bottom: 8),
@ -112,7 +123,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
}
void startImageSheet() {
showMyBottomSheet(context, callBackFunc: (){},
showMyBottomSheet(context,
callBackFunc: () {},
child: Column(
children: [
Container(
@ -123,14 +135,14 @@ class _ProfileScreenState extends State<ProfileScreen> {
)),
BottomSheetItem(
onTap: () {
openGallery(false);
// openGallery(false);
},
title: 'Open Gallery',
icon: Icons.browse_gallery_outlined,
),
BottomSheetItem(
onTap: () {
openGallery(true);
// openGallery(true);
},
title: 'Open Camera',
icon: Icons.camera,
@ -139,19 +151,17 @@ class _ProfileScreenState extends State<ProfileScreen> {
));
}
void openGallery(bool isCamera) async {
XFile? image = await _picker.pickImage(source: isCamera ? ImageSource.camera : ImageSource.gallery);
void openGallery(String image) async {
// XFile? image = await _picker.pickImage(source: isCamera ? ImageSource.camera : ImageSource.gallery);
if (image != null) {
String img = base64.encode(await image!.readAsBytes());
Utils.showLoading(context);
dynamic empImageUpdteResp = await ProfileApiClient().updateEmpImage(img);
Utils.hideLoading(context);
if (empImageUpdteResp['P_RETURN_STATUS'] == 'S') {
setState(() {
memberInformationList.eMPLOYEEIMAGE = img;
});
}
// String img = base64.encode(await image!.readAsBytes());
Utils.showLoading(context);
dynamic empImageUpdteResp = await ProfileApiClient().updateEmpImage(image);
Utils.hideLoading(context);
if (empImageUpdteResp['P_RETURN_STATUS'] == 'S') {
setState(() {
memberInformationList.eMPLOYEEIMAGE = image;
});
}
}
}

@ -44,12 +44,16 @@ class ProfilePanel extends StatelessWidget {
Widget profileImage() => memberInformationList.eMPLOYEEIMAGE == null
? SvgPicture.asset(
"assets/images/user.svg",
height: 68,
width: 68,)
: CircleAvatar(
radius: 68,
backgroundImage: MemoryImage(Utils.dataFromBase64String(memberInformationList.eMPLOYEEIMAGE!)),
backgroundColor: Colors.black,
);
"assets/images/user.svg",
height: 68,
width: 68,
)
: ClipOval(
child: Image.memory(
Utils.dataFromBase64String(memberInformationList.eMPLOYEEIMAGE!),
width: 75,
height: 75,
fit: BoxFit.fill,
),
);
}

@ -89,15 +89,13 @@ class _NewRequestState extends State<NewRequest> {
1.divider,
DefaultButton(LocaleKeys.submit.tr(), () {
// todo need to add submit method
openNewRequest();
})
.insideContainer,
openNewRequest();
}).insideContainer,
],
),
);
}
void openNewRequest() async {
try {
List<Map<String, dynamic>> values = getCCPDFFStructureModelList!.map((e) {
@ -123,7 +121,10 @@ class _NewRequestState extends State<NewRequest> {
submitCcpTransactionList = await MyRequestsApiClient().getSubmitNewRequest(values);
getCCPTransactionsList = await MyRequestsApiClient().getCcpTransactions(values);
Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.myRequests,);
Navigator.pushNamed(
context,
AppRoutes.myRequests,
);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);

@ -66,7 +66,9 @@ class _ItgDetailScreenState extends State<ItgDetailScreen> {
isRejectAvailable = itgRequest!.allowedActions!.any((element) => element.action == "Reject");
}
Utils.hideLoading(context);
setState(() {});
setState(() {
controller.jumpToPage(0);
});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
@ -125,7 +127,10 @@ class _ItgDetailScreenState extends State<ItgDetailScreen> {
},
children: [
RequestDetailFragment(fields: itgRequest?.fieldGoups?[1].fields ?? []),
ApprovalLevelfragment(wFHistory: itgRequest?.wFHistory ?? [], voidCallback: reloadITG,),
ApprovalLevelfragment(
wFHistory: itgRequest?.wFHistory ?? [],
voidCallback: reloadITG,
),
RequestDetailFragment(fields: itgRequest?.fieldGoups?[0].fields ?? []),
],
).expanded,
@ -254,24 +259,106 @@ class _ItgDetailScreenState extends State<ItgDetailScreen> {
if (allowedActionList[i].action! == "Reject" || allowedActionList[i].action! == "Approve" || allowedActionList[i].action! == "CLOSE") {
continue;
}
fabs.add(myFab(allowedActionList[i].action!, "", isIconAsset: false).paddingOnly(bottom: 12).onPress(() => handleFabAction(allowedActionList[i])));
fabs.add(myFab(getFabActionTitle(allowedActionList[i].action!), getFabActionImages(allowedActionList[i].action!)).paddingOnly(bottom: 12).onPress(() => handleFabAction(allowedActionList[i])));
}
return fabs;
}
String getFabActionImages(String actionTitle) {
String returnActionImage = "";
switch (actionTitle) {
case "Delegate":
returnActionImage = "assets/images/delegate.svg";
break;
case "RequestInformation":
returnActionImage = "assets/images/request_info.svg";
break;
case "ReportGenerated":
returnActionImage = "assets/images/request_info.svg";
break;
case "DataCorrected":
returnActionImage = "assets/images/request_info.svg";
break;
case "Doable":
returnActionImage = "assets/images/request_info.svg";
break;
case "NotDoable":
returnActionImage = "assets/images/request_info.svg";
break;
default:
returnActionImage = "assets/images/request_info.svg";
break;
}
return returnActionImage;
}
String getFabActionTitle(String title) {
String returnTitle = "";
switch (title) {
case "Delegate":
returnTitle = "Delegate";
break;
case "RequestInformation":
returnTitle = "Request Information";
break;
case "ReportGenerated":
returnTitle = "Report Generated";
break;
case "DataCorrected":
returnTitle = "Data Corrected";
break;
case "Doable":
returnTitle = "Doable";
break;
case "NotDoable":
returnTitle = "Not Doable";
break;
default:
returnTitle = title;
break;
}
return returnTitle;
}
void handleFabAction(AllowedActions action) {
print(action.toJson());
switch (action.action) {
case "Delegate":
showMyBottomSheet(context, callBackFunc: reloadITG,
child: DelegateSheet(title: LocaleKeys.delegate.tr(), apiMode: action.action!, notificationID: null, actionHistoryList: null, wFHistory: itgRequest?.wFHistory ?? []));
showMyBottomSheet(context,
callBackFunc: reloadITG,
child: DelegateSheet(
title: LocaleKeys.delegate.tr(),
apiMode: action.action!,
notificationID: null,
actionHistoryList: null,
wFHistory: itgRequest?.wFHistory ?? [],
callBackFunc: reloadITG,
));
break;
case "RequestInformation":
showMyBottomSheet(context, callBackFunc: reloadITG,
child: DelegateSheet(title: LocaleKeys.request_info.tr(), apiMode: action.action!, notificationID: null, actionHistoryList: null, wFHistory: itgRequest?.wFHistory ?? []));
showMyBottomSheet(context,
callBackFunc: reloadITG,
child: DelegateSheet(
title: LocaleKeys.request_info.tr(),
apiMode: action.action!,
notificationID: null,
actionHistoryList: null,
wFHistory: itgRequest?.wFHistory ?? [],
callBackFunc: reloadITG,
));
break;
case "Doable":
performAction("APPROVED");
break;
case "NotDoable":
performAction("REJECTED");
break;
case "Answer":
performAction("Answer");
break;
case "RFC":
// do something else
break;
@ -279,6 +366,9 @@ class _ItgDetailScreenState extends State<ItgDetailScreen> {
// do something else
break;
}
setState(() {
showFabOptions = false;
});
}
Widget myTab(String title, int index) {
@ -351,6 +441,8 @@ class _ItgDetailScreenState extends State<ItgDetailScreen> {
onTap: (note) {
if (actionMode == "APPROVED") {
performApproveAction(requestDetails!.requestType!, requestDetails!.iD!, requestDetails!.itemID!, AppState().memberInformationList?.eMPLOYEENUMBER ?? "", note);
} else if (actionMode == "Answer") {
performAnswerAction(requestDetails!.requestType!, requestDetails!.iD!, requestDetails!.itemID!, AppState().memberInformationList?.eMPLOYEENUMBER ?? "", note);
} else {
performRejectAction(requestDetails!.requestType!, requestDetails!.iD!, requestDetails!.itemID!, AppState().memberInformationList?.eMPLOYEENUMBER ?? "", note);
}
@ -359,6 +451,30 @@ class _ItgDetailScreenState extends State<ItgDetailScreen> {
);
}
void performAnswerAction(String requestType, int taskId, int itemId, String employeeNumber, String comments) async {
try {
Utils.showLoading(context);
ITGRequest? itgRequest = await WorkListApiClient().answerITGRequest(requestType, taskId, itemId, employeeNumber, "", comments);
Utils.hideLoading(context);
Utils.showToast(LocaleKeys.yourChangeHasBeenSavedSuccessfully.tr());
// Navigator.pop(context, "delegate_reload");
AppState().requestAllList!.removeAt(AppState().itgWorkListIndex!);
if (AppState().requestAllList!.isEmpty) {
Navigator.pop(context, "delegate_reload");
} else {
if (AppState().requestAllList!.length <= AppState().itgWorkListIndex!) {
Navigator.pop(context, "delegate_reload");
} else {
requestDetails = null;
getDataFromState();
}
}
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
void performRejectAction(String requestType, int taskId, int itemId, String employeeNumber, String comments) async {
try {
Utils.showLoading(context);
@ -420,5 +536,4 @@ class _ItgDetailScreenState extends State<ItgDetailScreen> {
}
}
}
}

@ -138,7 +138,8 @@ class ApprovalLevelfragment extends StatelessWidget {
} else if (code.toLowerCase() == "approved" ||
code.toLowerCase() == "auto-approve" ||
code.toLowerCase() == "auto-approved" ||
code.toLowerCase() == "doable") {
code.toLowerCase() == "doable" ||
code.toLowerCase() == "answer") {
return MyColors.greenColor;
} else if (code.toLowerCase() == "requested information" || code.toLowerCase() == "assign" || code.toLowerCase() == "reassign") {
return MyColors.orange;

@ -28,8 +28,9 @@ class DelegateSheet extends StatefulWidget {
String title, apiMode;
List<GetActionHistoryList>? actionHistoryList;
List<WFHistory>? wFHistory;
VoidCallback callBackFunc;
DelegateSheet({required this.title, required this.apiMode, this.notificationID, this.actionHistoryList, this.wFHistory});
DelegateSheet({required this.title, required this.apiMode, this.notificationID, this.actionHistoryList, this.wFHistory, required this.callBackFunc});
@override
State<DelegateSheet> createState() => _DelegateSheetState();
@ -46,6 +47,8 @@ class _DelegateSheetState extends State<DelegateSheet> {
List<GetFavoriteReplacements>? favUsersList;
List<ReplacementList>? replacementList;
bool isImageLoaded = false;
@override
void initState() {
super.initState();
@ -90,6 +93,17 @@ class _DelegateSheetState extends State<DelegateSheet> {
favUsersList = await WorkListApiClient().getFavoriteReplacementWithImage(selectedFavLetter ?? "");
if (isNeedLoading) Utils.hideLoading(context);
setState(() {});
fetchFavUsersListNew(isNeedLoading: false);
return null;
}
Future fetchFavUsersListNew({bool isNeedLoading = true}) async {
if (isNeedLoading) Utils.showLoading(context);
favUsersList = await WorkListApiClient().getFavoriteReplacementWithImageNew(selectedFavLetter ?? "");
if (isNeedLoading) Utils.hideLoading(context);
setState(() {
isImageLoaded = true;
});
return null;
}
@ -194,7 +208,7 @@ class _DelegateSheetState extends State<DelegateSheet> {
).onPress(() {
showMyBottomSheet(
context,
callBackFunc: (){},
callBackFunc: () {},
child: SearchOptionsSheet(
selectedType,
onSelection: (String value) {
@ -392,13 +406,15 @@ class _DelegateSheetState extends State<DelegateSheet> {
Widget showItem(GetActionHistoryList actionHistory) {
return InkWell(
onTap: () {
Navigator.pop(context);
showMyBottomSheet(context,
callBackFunc: (){},
callBackFunc: widget.callBackFunc,
child: SelectedItemSheet(
"Comment",
apiMode: widget.apiMode,
actionHistoryList: actionHistory,
notificationID: widget.notificationID,
isITGRequest: widget.wFHistory != null,
));
},
child: Row(
@ -438,8 +454,9 @@ class _DelegateSheetState extends State<DelegateSheet> {
Widget showItgItem(WFHistory wfHistory) {
return InkWell(
onTap: () {
Navigator.pop(context);
showMyBottomSheet(context,
callBackFunc: (){},
callBackFunc: widget.callBackFunc,
child: SelectedItgItemSheet(
"Comment",
apiMode: widget.apiMode,
@ -463,23 +480,43 @@ class _DelegateSheetState extends State<DelegateSheet> {
Widget showFavUserItem(GetFavoriteReplacements actionHistory) {
return InkWell(
onTap: () {
Navigator.pop(context);
showMyBottomSheet(context,
callBackFunc: (){},
callBackFunc: widget.callBackFunc,
child: SelectedItemSheet(
"Comment",
apiMode: widget.apiMode,
favoriteReplacements: actionHistory,
notificationID: widget.notificationID,
isITGRequest: widget.wFHistory != null,
));
},
child: Row(
children: [
CircularAvatar(
url: actionHistory.employeeImage,
height: 30,
width: 30,
isImageBase64: (actionHistory.employeeImage != null || actionHistory.employeeImage!.isNotEmpty) ? true : false,
),
actionHistory.employeeImage != ""
? CircularAvatar(
url: actionHistory.employeeImage,
height: 40,
width: 40,
isImageBase64: (actionHistory.employeeImage != null || actionHistory.employeeImage!.isNotEmpty) ? true : false,
)
: isImageLoaded
? CircularAvatar(
height: 40,
width: 40,
isImageBase64: false,
)
: ClipRRect(
borderRadius: const BorderRadius.all(
Radius.circular(50),
),
child: Image.network(
"https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo",
fit: BoxFit.cover,
height: 40,
width: 40,
).toShimmer(),
),
16.width,
Expanded(
child: (actionHistory.employeeDisplayName ?? "").toText12(),
@ -509,13 +546,15 @@ class _DelegateSheetState extends State<DelegateSheet> {
Widget showInputUserItem(ReplacementList actionHistory) {
return InkWell(
onTap: () {
Navigator.pop(context);
showMyBottomSheet(context,
callBackFunc: (){},
callBackFunc: widget.callBackFunc,
child: SelectedItemSheet(
LocaleKeys.comments.tr(),
apiMode: widget.apiMode,
replacementList: actionHistory,
notificationID: widget.notificationID,
isITGRequest: widget.wFHistory != null,
));
},
child: Row(

@ -1,12 +1,15 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_action_history_list_model.dart';
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
@ -19,8 +22,11 @@ class SelectedItemSheet extends StatelessWidget {
GetActionHistoryList? actionHistoryList;
GetFavoriteReplacements? favoriteReplacements;
ReplacementList? replacementList;
MemberInformationListModel? memberInformationListModel;
SelectedItemSheet(this.title, {required this.apiMode, this.notificationID, this.actionHistoryList, this.favoriteReplacements, this.replacementList});
bool isITGRequest;
SelectedItemSheet(this.title, {required this.apiMode, this.notificationID, this.actionHistoryList, this.favoriteReplacements, this.replacementList, this.isITGRequest = false});
TextEditingController username = TextEditingController();
String comment = "";
@ -41,9 +47,9 @@ class SelectedItemSheet extends StatelessWidget {
children: [
title.toText24(isBold: true),
21.height,
if (actionHistoryList != null) showItem(actionHistoryList!.nAME, actionHistoryList!.isFavorite),
if (favoriteReplacements != null) showItem(favoriteReplacements!.employeeDisplayName, true),
if (replacementList != null) showItem(replacementList!.employeeDisplayName, replacementList!.isFavorite),
if (actionHistoryList != null) showItem(actionHistoryList!.nAME, context, actionHistoryList!.isFavorite),
if (favoriteReplacements != null) showItem(favoriteReplacements!.employeeDisplayName, context, true),
if (replacementList != null) showItem(replacementList!.employeeDisplayName, context, replacementList!.isFavorite),
14.height,
InputWidget(
"Enter a note",
@ -97,7 +103,7 @@ class SelectedItemSheet extends StatelessWidget {
email = replacementList!.emailAddress;
userId = replacementList!.userName;
}
performNetworkCall(context, email: email ?? "", userId: userId ?? "");
isITGRequest ? performITGNetworkCall(context, email: email ?? "", userId: userId ?? "") : performNetworkCall(context, email: email ?? "", userId: userId ?? "");
} else {
Utils.showToast("Please enter comments");
}
@ -115,10 +121,26 @@ class SelectedItemSheet extends StatelessWidget {
);
}
void getUserInformation(BuildContext context) async {
String? empID = "";
if (actionHistoryList != null) empID = actionHistoryList!.uSERNAME;
if (favoriteReplacements != null) empID = favoriteReplacements!.userName;
if (replacementList != null) empID = replacementList!.userName;
try {
memberInformationListModel = await WorkListApiClient().getUserInformation(-999, empID!);
if (actionHistoryList != null) empID = actionHistoryList!.eMPLOYEEIMAGE = memberInformationListModel!.eMPLOYEEIMAGE ?? AppState().getBase64ImageEmp;
if (favoriteReplacements != null) empID = favoriteReplacements!.employeeImage = memberInformationListModel!.eMPLOYEEIMAGE ?? AppState().getBase64ImageEmp;
if (replacementList != null) empID = replacementList!.employeeImage = memberInformationListModel!.eMPLOYEEIMAGE ?? AppState().getBase64ImageEmp;
(context as Element).markNeedsBuild();
} catch (ex) {
Utils.handleException(ex, context, null);
}
}
Future<void> performNetworkCall(BuildContext context, {String? email, String? userId}) async {
Utils.showLoading(context);
try {
await WorkListApiClient().submitComment(comment: comment, email: email, userId: userId, notificationId: notificationID, apiMode: apiMode);
await WorkListApiClient().submitComment(comment: comment, email: email, userId: userId, notificationId: notificationID, apiMode: apiMode, approverIndex: actionHistoryList!.sEQUENCE);
Utils.hideLoading(context);
// Navigator.pop(context);
// Navigator.pop(context);
@ -129,30 +151,79 @@ class SelectedItemSheet extends StatelessWidget {
}
}
Widget showItem(String? name, bool? isFav) {
Future<void> performITGNetworkCall(BuildContext context, {String? email, String? userId}) async {
Utils.showLoading(context);
try {
var requestDetails = AppState().requestAllList![AppState().itgWorkListIndex!];
if (apiMode == "Delegate") {
await WorkListApiClient().delegateITGRequest(requestDetails.requestType!, requestDetails.iD!, requestDetails.itemID!, AppState().memberInformationList?.eMPLOYEENUMBER ?? "",
isITGRequest ? favoriteReplacements!.userName! : actionHistoryList!.uSERNAME!, comment);
} else if (apiMode == "RequestInformation") {
await WorkListApiClient().informationITGRequest(requestDetails.requestType!, requestDetails.iD!, requestDetails.itemID!, AppState().memberInformationList?.eMPLOYEENUMBER ?? "",
isITGRequest ? favoriteReplacements!.userName! : actionHistoryList!.uSERNAME!, comment);
} else if (apiMode == "Answer") {
await WorkListApiClient().answerITGRequest(requestDetails.requestType!, requestDetails.iD!, requestDetails.itemID!, AppState().memberInformationList?.eMPLOYEENUMBER ?? "",
isITGRequest ? favoriteReplacements!.userName! : actionHistoryList!.uSERNAME!, comment);
}
Utils.hideLoading(context);
Navigator.pop(context, "delegate_reload");
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
Widget showItem(String? name, BuildContext context, bool? isFav) {
if (actionHistoryList != null) {
if (actionHistoryList!.eMPLOYEEIMAGE == null || actionHistoryList!.eMPLOYEEIMAGE == "") {
// getUserInformation(context);
}
}
if (favoriteReplacements != null) {
if (favoriteReplacements!.employeeImage == null || favoriteReplacements!.employeeImage == "") {
// getUserInformation(context);
}
}
if (replacementList != null) {
if (replacementList!.employeeImage == null || replacementList!.employeeImage == "") {
// getUserInformation(context);
}
}
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: Color(0xffF7F7F7),
color: const Color(0xffF7F7F7),
border: Border.all(
color: Color(0xffefefef),
color: const Color(0xffefefef),
width: 1,
),
),
padding: EdgeInsets.only(top: 16, bottom: 16, left: 21, right: 21),
padding: const EdgeInsets.only(top: 16, bottom: 16, left: 21, right: 21),
child: Row(
children: [
(actionHistoryList != null && actionHistoryList!.eMPLOYEEIMAGE != null)
? CircularAvatar(
height: 30,
width: 30,
url: actionHistoryList!.eMPLOYEEIMAGE,
isImageBase64: true,
)
: CircularAvatar(
height: 30,
width: 30,
),
(isFav != null && isFav && favoriteReplacements != null)
? favoriteReplacements!.employeeImage != ""
? CircularAvatar(
height: 40,
width: 40,
url: favoriteReplacements != null ? favoriteReplacements!.employeeImage : actionHistoryList!.eMPLOYEEIMAGE,
isImageBase64: true,
)
: CircularAvatar(
height: 40,
width: 40,
).toShimmer()
: (actionHistoryList != null && actionHistoryList!.eMPLOYEEIMAGE != null)
? CircularAvatar(
height: 40,
width: 40,
url: actionHistoryList!.eMPLOYEEIMAGE,
isImageBase64: true,
)
: CircularAvatar(
height: 40,
width: 40,
).toShimmer(),
16.width,
Expanded(
child: (name ?? "").toText12(),

@ -126,10 +126,11 @@ class SelectedItgItemSheet extends StatelessWidget {
} else if (apiMode == "RequestInformation") {
await WorkListApiClient()
.informationITGRequest(requestDetails.requestType!, requestDetails.iD!, requestDetails.itemID!, AppState().memberInformationList?.eMPLOYEENUMBER ?? "", wfHistory.employeeID!, comment);
} else if (apiMode == "Answer") {
await WorkListApiClient()
.answerITGRequest(requestDetails.requestType!, requestDetails.iD!, requestDetails.itemID!, AppState().memberInformationList?.eMPLOYEENUMBER ?? "", wfHistory.employeeID!, comment);
}
Utils.hideLoading(context);
Navigator.pop(context);
Navigator.pop(context);
Navigator.pop(context, "delegate_reload");
} catch (ex) {
Utils.hideLoading(context);

@ -0,0 +1,137 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/my_attendance_api_client.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart';
import 'package:mohem_flutter_app/models/worklist/resubmit_eit_response_model.dart';
import 'package:mohem_flutter_app/models/worklist_response_model.dart';
import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
class UpdateContinueSheet extends StatefulWidget {
WorkListResponseModel? workListData;
List<GetEitCollectionNotificationBodyList>? getEitCollectionNotificationBodyList;
DynamicListViewParams? dynamicParams;
UpdateContinueSheet({this.workListData, this.getEitCollectionNotificationBodyList, this.dynamicParams, Key? key}) : super(key: key);
@override
State<UpdateContinueSheet> createState() => _UpdateContinueSheetState();
}
class _UpdateContinueSheetState extends State<UpdateContinueSheet> {
double itemHeight = 0;
double itemWidth = 0;
List<Map<String, dynamic>> validatedValues = [];
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
itemHeight = (size.height - kToolbarHeight - 24) / 9;
itemWidth = size.width / 2;
return Column(
children: [
if ((widget.workListData?.sUBJECT ?? "").isNotEmpty) widget.workListData!.sUBJECT!.toText14().paddingOnly(top: 10, right: 21, left: 21, bottom: 21),
ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (cxt, index) {
List<CollectionNotificationEit> dataList = widget.getEitCollectionNotificationBodyList!.isEmpty ? [] : (widget.getEitCollectionNotificationBodyList![index].collectionNotification ?? []);
dataList = dataList.where((o) => o.displayFlag == "Y").toList();
bool isOdd = false;
if (dataList.length % 2 != 0) {
isOdd = true;
dataList.add(new CollectionNotificationEit());
}
return GridView.builder(
itemCount: dataList.length,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) => ItemDetailViewGridItem(
index,
dataList[index].segmentPrompt,
dataList[index].segmentValueDsp,
isNeedToShowEmptyDivider: (dataList.length == index + 1)
? isOdd
? true
: false
: false,
),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: (itemWidth / itemHeight),
),
).objectContainerView();
},
separatorBuilder: (cxt, index) => 12.height,
itemCount: widget.getEitCollectionNotificationBodyList!.length,
),
Padding(
padding: const EdgeInsets.only(right: 21, left: 21, bottom: 21),
child: Row(
children: [
DefaultButton(
LocaleKeys.edit.tr(),
() => performEditAction(),
colors: const [Color(0xffE47A7E), Color(0xffDE6D71)],
).expanded,
8.width,
DefaultButton(
LocaleKeys.next.tr(),
() => performNextAction(),
colors: const [Color(0xff28C884), Color(0xff1BB271)],
).expanded,
],
),
),
],
);
}
void performNextAction() async {
//Resubmit EIT Transaction
try {
Utils.showLoading(context);
List<Map<String, dynamic>> values = [];
if (validatedValues!.isNotEmpty) {
values = validatedValues;
} else {
for (GetEitCollectionNotificationBodyList element in widget.getEitCollectionNotificationBodyList!) {
for (CollectionNotificationEit collectionElement in element.collectionNotification!) {
values.add({
"TRANSACTION_NUMBER": collectionElement.transactionNumber,
"NAME": collectionElement.applicationColumnName,
"VARCHAR2_VALUE": collectionElement.varchar2Value,
"NUMBER_VALUE": collectionElement.numberValue,
"DATE_VALUE": collectionElement.dateValue,
});
}
}
}
ResubmitEITRequestResponse resubmitEITRequestResponse = await MyAttendanceApiClient().reSubmitEitTransaction(widget.workListData!.iTEMKEY!, widget.workListData!.nOTIFICATIONID, values);
Utils.hideLoading(context);
await Navigator.pushNamed(
context,
AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), resubmitEITRequestResponse.pTRANSACTIONID!, widget.workListData!.iTEMKEY!, 'eit'),
);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
void performEditAction() {
// ignore: avoid_annotating_with_dynamic
Navigator.pushNamed(context, AppRoutes.addDynamicInput, arguments: widget.dynamicParams).then((dynamic value) {
validatedValues = value;
});
}
}

@ -23,12 +23,16 @@ import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_mod
import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/GetRFCEmployeeList.dart';
import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist_response_model.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/sheets/delegate_sheet.dart';
import 'package:mohem_flutter_app/ui/work_list/sheets/selected_item_sheet.dart';
import 'package:mohem_flutter_app/ui/work_list/sheets/update_continue_sheet.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/actions_fragment.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/attachments_fragment.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/detail_fragment.dart';
@ -65,6 +69,8 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
List<NotificationGetRespondAttributesList> getNotificationRespondAttributes = [];
NotificationGetRespondAttributesList? notificationNoteInput;
List<GetRFCEmployeeList> getRFCEmployeeList = [];
//HR Details Screen Requests
List<GetEitCollectionNotificationBodyList>? getEitCollectionNotificationBodyList = [];
List<GetPhonesNotificationBodyList>? getPhonesNotificationBodyList = [];
@ -375,62 +381,146 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
}
fabs.add(myFab(
notificationButtonsList[i].bUTTONLABEL!,
notificationButtonsList[i].bUTTONACTION == "DELEGATE" ? "assets/images/delegate.svg" : notificationButtonsList[i].bUTTONICON ?? "",
isIconAsset: notificationButtonsList[i].bUTTONACTION == "DELEGATE" ? true : false,
getActionImage(notificationButtonsList[i].bUTTONACTION!),
isIconAsset: true,
).paddingOnly(bottom: 12).onPress(() => handleFabAction(notificationButtonsList[i])));
}
return fabs;
}
String getActionImage(String action) {
String returnActionImage = "";
switch (action) {
case "DELEGATE":
returnActionImage = "assets/images/delegate.svg";
break;
case "REQUEST_INFO":
returnActionImage = "assets/images/request_info.svg";
break;
case "RFC":
returnActionImage = "assets/images/worklist/return.svg";
break;
case "UPDATE_ACTION":
returnActionImage = "assets/images/worklist/update_action.svg";
break;
}
return returnActionImage;
}
void handleFabAction(GetNotificationButtonsList notificationButton) {
print("notificationButton:${notificationButton.bUTTONACTION}");
switch (notificationButton.bUTTONACTION) {
case "DELEGATE":
showMyBottomSheet(context,
callBackFunc: reloadWorkList,
child: DelegateSheet(title: LocaleKeys.delegate.tr(), apiMode: notificationButton.bUTTONACTION!, notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList));
child: DelegateSheet(
title: LocaleKeys.delegate.tr(),
apiMode: notificationButton.bUTTONACTION!,
notificationID: workListData!.nOTIFICATIONID,
actionHistoryList: actionHistoryList,
callBackFunc: reloadWorkList,
));
break;
case "REQUEST_INFO":
// do something else
showMyBottomSheet(context,
callBackFunc: reloadWorkList,
child: DelegateSheet(title: LocaleKeys.request_info.tr(), apiMode: "REQUEST_INFO", notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList));
child: DelegateSheet(
title: LocaleKeys.request_info.tr(),
apiMode: "REQUEST_INFO",
notificationID: workListData!.nOTIFICATIONID,
actionHistoryList: actionHistoryList,
callBackFunc: reloadWorkList,
));
break;
case "TRANSFER_INFO":
// do something else
showMyBottomSheet(context,
callBackFunc: reloadWorkList,
child:
DelegateSheet(title: notificationButton.bUTTONLABEL!, apiMode: notificationButton.bUTTONACTION!, notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList));
child: DelegateSheet(
title: notificationButton.bUTTONLABEL!,
apiMode: notificationButton.bUTTONACTION!,
notificationID: workListData!.nOTIFICATIONID,
actionHistoryList: actionHistoryList,
callBackFunc: reloadWorkList,
));
break;
case "ANSWER_INFO":
performAction(notificationButton.bUTTONACTION!, title: notificationButton.bUTTONLABEL);
break;
case "RFC":
// do something else
getRFCEmployeeListFunc();
break;
case "APPROVE":
performAction(notificationButton.bUTTONACTION!);
break;
case "UPDATE_ACTION":
// do something else
showMyBottomSheet(
context,
callBackFunc: reloadWorkList,
child: UpdateContinueSheet(
workListData: workListData,
getEitCollectionNotificationBodyList: getEitCollectionNotificationBodyList,
dynamicParams: DynamicListViewParams(workListData!.sUBJECT!, workListData!.fUNCTIONNAME!,
isUpdate: true, collectionNotificationList: getEitCollectionNotificationBodyList![0].collectionNotification)),
);
break;
case "APPROVE_AND_FORWARD":
showMyBottomSheet(context,
callBackFunc: reloadWorkList,
child: DelegateSheet(title: "Approve and Forward", apiMode: notificationButton.bUTTONACTION!, notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList));
child: DelegateSheet(
title: "Approve and Forward",
apiMode: notificationButton.bUTTONACTION!,
notificationID: workListData!.nOTIFICATIONID,
actionHistoryList: actionHistoryList,
callBackFunc: reloadWorkList,
));
break;
case "FORWARD":
showMyBottomSheet(context,
callBackFunc: reloadWorkList,
child: DelegateSheet(title: "Forward", apiMode: notificationButton.bUTTONACTION!, notificationID: workListData!.nOTIFICATIONID, actionHistoryList: actionHistoryList));
child: DelegateSheet(
title: "Forward",
apiMode: notificationButton.bUTTONACTION!,
notificationID: workListData!.nOTIFICATIONID,
actionHistoryList: actionHistoryList,
callBackFunc: reloadWorkList,
));
break;
case "REJECT":
performNetworkCall(context, email: "", userId: "");
performAction(notificationButton.bUTTONACTION!);
break;
case "RETURNED":
Navigator.pop(context);
break;
}
setState(() {
showFabOptions = false;
});
}
void getRFCEmployeeListFunc() async {
try {
Utils.showLoading(context);
getRFCEmployeeList = await WorkListApiClient().getRFCEmployeeeList(workListData!.nOTIFICATIONID!);
Utils.hideLoading(context);
actionHistoryList.last.sEQUENCE = getRFCEmployeeList[0].sEQ;
showMyBottomSheet(context,
callBackFunc: reloadWorkList,
child: SelectedItemSheet(
"Comment",
apiMode: "RFC",
actionHistoryList: actionHistoryList.last,
notificationID: workListData!.nOTIFICATIONID,
isITGRequest: false,
));
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
Future<void> performNetworkCall(BuildContext context, {String? email, String? userId}) async {
@ -516,7 +606,7 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
}
void performAction(String actionMode, {String? title}) {
TextEditingController textEditingController = TextEditingController();
print(actionMode);
showDialog(
context: context,
builder: (cxt) => AcceptRejectInputDialog(
@ -539,7 +629,7 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
}
],
};
if (actionMode == "APPROVED" || actionMode == "APPROVE" || actionMode == "CLOSE") {
if (actionMode == "APPROVED" || actionMode == "APPROVE" || actionMode == "CLOSE" || actionMode == "ANSWER_INFO" || actionMode == "RFC") {
performNotificationAction(payload);
} else if (note.isNotEmpty && (actionMode != "APPROVED" || actionMode != "APPROVE")) {
performNotificationAction(payload);
@ -823,6 +913,8 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
void getActionHistory() async {
try {
isActionHistoryLoaded = false;
actionHistoryList.clear();
// if (apiCallCount == 0) Utils.showLoading(context);
// apiCallCount++;
actionHistoryList = await WorkListApiClient().getActionHistory(workListData!.nOTIFICATIONID!);
@ -842,6 +934,8 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
void getAttachments() async {
try {
isAttachmentLoaded = false;
getAttachmentList.clear();
// if (apiCallCount == 0) Utils.showLoading(context);
// apiCallCount++;
getAttachmentList = await WorkListApiClient().getAttachments(workListData!.nOTIFICATIONID!);
@ -859,12 +953,76 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
}
}
// Widget showUpdateContinueSheet(List<GetEitCollectionNotificationBodyList> list) {
// double itemHeight = 0;
// double itemWidth = 0;
// var size = MediaQuery.of(context).size;
// itemHeight = (size.height - kToolbarHeight - 24) / 9;
// itemWidth = size.width / 2;
// return Column(
// children: [
// if ((workListData?.sUBJECT ?? "").isNotEmpty) workListData!.sUBJECT!.toText14().paddingOnly(top: 10, right: 21, left: 21, bottom: 21),
// ListView.separated(
// shrinkWrap: true,
// physics: const NeverScrollableScrollPhysics(),
// itemBuilder: (cxt, index) {
// List<CollectionNotificationEit> dataList = list.isEmpty ? [] : (list[index].collectionNotification ?? []);
// dataList = dataList.where((o) => o.displayFlag == "Y").toList();
// bool isOdd = false;
// if (dataList.length % 2 != 0) {
// isOdd = true;
// dataList.add(new CollectionNotificationEit());
// }
// return GridView.builder(
// itemCount: dataList.length,
// shrinkWrap: true,
// physics: const NeverScrollableScrollPhysics(),
// itemBuilder: (context, index) => ItemDetailViewGridItem(
// index,
// dataList[index].segmentPrompt,
// dataList[index].segmentValueDsp,
// isNeedToShowEmptyDivider: (dataList.length == index + 1)
// ? isOdd
// ? true
// : false
// : false,
// ),
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 2,
// childAspectRatio: (itemWidth / itemHeight),
// ),
// ).objectContainerView();
// },
// separatorBuilder: (cxt, index) => 12.height,
// itemCount: list.length,
// ),
// Padding(
// padding: const EdgeInsets.only(right: 21, left: 21, bottom: 21),
// child: Row(
// children: [
// DefaultButton(
// LocaleKeys.edit.tr(),
// () => performEditAction(),
// colors: const [Color(0xffE47A7E), Color(0xffDE6D71)],
// ).expanded,
// 8.width,
// DefaultButton(
// LocaleKeys.next.tr(),
// () => performNextAction(),
// colors: const [Color(0xff28C884), Color(0xff1BB271)],
// ).expanded,
// ],
// ),
// ),
// ],
// );
// }
Widget showLoadingAnimation() {
return Lottie.asset(
'assets/lottie/loading.json',
repeat: true,
reverse: false,
fit: BoxFit.contain,
);
}
}

@ -2,6 +2,7 @@ import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
@ -87,12 +88,21 @@ class AcceptRejectInputDialog extends StatelessWidget {
).expanded,
10.width,
DefaultButton(
actionMode == "REJECTED" ? LocaleKeys.reject.tr() : LocaleKeys.ok.tr(),
(actionMode == "REJECTED" || actionMode == "REJECT") ? LocaleKeys.reject.tr() : LocaleKeys.ok.tr(),
() {
Navigator.pop(context);
onTap(note);
if (note.isEmpty) {
if ((actionMode != "REJECTED" && actionMode != "REJECT") && actionMode != "ANSWER_INFO" && actionMode != "RFC") {
Navigator.pop(context);
onTap(note);
} else {
Utils.showToast(LocaleKeys.pleaseEnterComments.tr());
}
} else {
Navigator.pop(context);
onTap(note);
}
},
colors: actionMode == "REJECTED"
colors: (actionMode == "REJECTED" || actionMode == "REJECT")
? const [
Color(0xffE47A7E),
Color(0xffE47A7E),

@ -80,9 +80,13 @@ class ItemDetailViewGridItem extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Flexible(child: "$title:".toText12Auto(isBold: true, color: const Color(0xff2BB8A6))),
title != null ? Flexible(child: "$title:".toText12Auto(isBold: true, color: const Color(0xff2BB8A6))) : Container(),
4.width,
type!.toLowerCase() == "table" ? getStringFromJSON(value!) : Flexible(child: (value!.isEmpty ? "--" : value).toString().toText12Auto(color: MyColors.normalTextColor)),
type != null
? type!.toLowerCase() == "table"
? getStringFromJSON(value!)
: Flexible(child: (value!.isEmpty ? "--" : value).toString().toText12Auto(color: MyColors.normalTextColor))
: Container(),
],
),
);

@ -96,6 +96,7 @@ dependencies:
video_player: ^2.4.7
just_audio: ^0.9.30
dev_dependencies:
flutter_test:
@ -128,7 +129,9 @@ flutter:
- assets/langs/
- assets/icons/
- assets/lottie/
- assets/audio/
- assets/images/
- assets/images/worklist/
- assets/images/login/
- assets/icons/chat/
- assets/images/logos/
@ -184,3 +187,6 @@ flutter:
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
# Adding this to test the push from iMac

Loading…
Cancel
Save