Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Sai Srinivas
GEN_ERP_2025
Commits
e079c6e8
Commit
e079c6e8
authored
Jul 24, 2025
by
Sai Srinivas
Browse files
24-07-2025 By Sai Srinivas
Account Details and Appointment Calendar.
parent
b38d986d
Changes
22
Show whitespace changes
Inline
Side-by-side
assets/svg/appbar_back_button.svg
View file @
e079c6e8
<svg
width=
"24"
height=
"23"
viewBox=
"0 0 24 23"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<svg
width=
"24"
height=
"23"
viewBox=
"0 0 24 23"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<circle
cx=
"12.001"
cy=
"11.5"
r=
"9.38963"
fill=
"white"
/>
<circle
cx=
"12.001"
cy=
"11.5"
r=
"9.38963"
fill=
"white"
/>
<path
d=
"M12 0.958008C9.82441 0.958008 7.69767 1.57627 5.88873 2.7346C4.07979 3.89293 2.66989 5.53932 1.83733 7.46555C1.00477 9.39179 0.786929 11.5114 1.21137 13.5563C1.6358 15.6011 2.68345 17.4795 4.22183 18.9538C5.76021 20.428 7.72022 21.432 9.85401 21.8388C11.9878 22.2455 14.1995 22.0368 16.2095 21.2389C18.2195 20.441 19.9375 19.0899 21.1462 17.3563C22.3549 15.6227 23 13.5846 23 11.4997C23 8.70385 21.8411 6.02254 19.7782 4.04559C17.7153 2.06864 14.9174 0.958008 12 0.958008ZM14.71 15.6109C14.8037 15.7 14.8781 15.806 14.9289 15.9228C14.9797 16.0396 15.0058 16.1648 15.0058 16.2913C15.0058 16.4179 14.9797 16.5431 14.9289 16.6599C14.8781 16.7767 14.8037 16.8827 14.71 16.9718C14.617 17.0616 14.5064 17.1329 14.3846 17.1815C14.2627 17.2302 14.132 17.2552 14 17.2552C13.868 17.2552 13.7373 17.2302 13.6154 17.1815C13.4936 17.1329 13.383 17.0616 13.29 16.9718L8.29 12.1801C8.19628 12.091 8.12188 11.985 8.07111 11.8682C8.02034 11.7514 7.99421 11.6262 7.99421 11.4997C7.99421 11.3732 8.02034 11.2479 8.07111 11.1311C8.12188 11.0143 8.19628 10.9083 8.29 10.8193L13.29 6.02759C13.3832 5.93824 13.4939 5.86736 13.6158 5.819C13.7376 5.77064 13.8681 5.74575 14 5.74575C14.1319 5.74575 14.2624 5.77064 14.3843 5.819C14.5061 5.86736 14.6168 5.93824 14.71 6.02759C14.8032 6.11694 14.8772 6.22302 14.9277 6.33977C14.9781 6.45651 15.0041 6.58164 15.0041 6.70801C15.0041 6.83437 14.9781 6.9595 14.9277 7.07625C14.8772 7.19299 14.8032 7.29907 14.71 7.38842L10.41 11.4997L14.71 15.6109Z"
fill=
"#1487C9"
/>
<path
d=
"M12 0.958008C9.82441 0.958008 7.69767 1.57627 5.88873 2.7346C4.07979 3.89293 2.66989 5.53932 1.83733 7.46555C1.00477 9.39179 0.786929 11.5114 1.21137 13.5563C1.6358 15.6011 2.68345 17.4795 4.22183 18.9538C5.76021 20.428 7.72022 21.432 9.85401 21.8388C11.9878 22.2455 14.1995 22.0368 16.2095 21.2389C18.2195 20.441 19.9375 19.0899 21.1462 17.3563C22.3549 15.6227 23 13.5846 23 11.4997C23 8.70385 21.8411 6.02254 19.7782 4.04559C17.7153 2.06864 14.9174 0.958008 12 0.958008ZM14.71 15.6109C14.8037 15.7 14.8781 15.806 14.9289 15.9228C14.9797 16.0396 15.0058 16.1648 15.0058 16.2913C15.0058 16.4179 14.9797 16.5431 14.9289 16.6599C14.8781 16.7767 14.8037 16.8827 14.71 16.9718C14.617 17.0616 14.5064 17.1329 14.3846 17.1815C14.2627 17.2302 14.132 17.2552 14 17.2552C13.868 17.2552 13.7373 17.2302 13.6154 17.1815C13.4936 17.1329 13.383 17.0616 13.29 16.9718L8.29 12.1801C8.19628 12.091 8.12188 11.985 8.07111 11.8682C8.02034 11.7514 7.99421 11.6262 7.99421 11.4997C7.99421 11.3732 8.02034 11.2479 8.07111 11.1311C8.12188 11.0143 8.19628 10.9083 8.29 10.8193L13.29 6.02759C13.3832 5.93824 13.4939 5.86736 13.6158 5.819C13.7376 5.77064 13.8681 5.74575 14 5.74575C14.1319 5.74575 14.2624 5.77064 14.3843 5.819C14.5061 5.86736 14.6168 5.93824 14.71 6.02759C14.8032 6.11694 14.8772 6.22302 14.9277 6.33977C14.9781 6.45651 15.0041 6.58164 15.0041 6.70801C15.0041 6.83437 14.9781 6.9595 14.9277 7.07625C14.8772 7.19299 14.8032 7.29907 14.71 7.38842L10.41 11.4997L14.71 15.6109Z"
fill=
"#1487C9"
/>
</svg>
</svg>
assets/svg/crm/calendar_left.svg
0 → 100644
View file @
e079c6e8
<svg
width=
"28"
height=
"27"
viewBox=
"0 0 28 27"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<circle
cx=
"14.002"
cy=
"13.4234"
r=
"10.957"
transform=
"rotate(-180 14.002 13.4234)"
fill=
"#1487C9"
/>
<path
d=
"M14.0022 1.12158C11.4634 1.12158 8.98168 1.84304 6.87079 3.19473C4.75989 4.54641 3.11465 6.46761 2.14311 8.71538C1.17158 10.9632 0.917377 13.4365 1.41266 15.8228C1.90795 18.209 3.13047 20.4009 4.92564 22.1212C6.72081 23.8416 9.00799 25.0132 11.498 25.4878C13.9879 25.9625 16.5688 25.7189 18.9143 24.7878C21.2598 23.8568 23.2646 22.2801 24.675 20.2571C26.0855 18.2342 26.8383 15.8559 26.8383 13.4229C26.8383 10.1604 25.4859 7.0315 23.0787 4.72456C20.6715 2.41761 17.4065 1.12158 14.0022 1.12158ZM17.1645 18.2204C17.2739 18.3244 17.3607 18.448 17.42 18.5843C17.4792 18.7206 17.5097 18.8668 17.5097 19.0144C17.5097 19.162 17.4792 19.3082 17.42 19.4445C17.3607 19.5807 17.2739 19.7044 17.1645 19.8084C17.056 19.9132 16.927 19.9964 16.7848 20.0532C16.6426 20.1099 16.4901 20.1392 16.336 20.1392C16.182 20.1392 16.0294 20.1099 15.8872 20.0532C15.745 19.9964 15.616 19.9132 15.5075 19.8084L9.67288 14.2169C9.56351 14.1129 9.4767 13.9892 9.41746 13.853C9.35821 13.7167 9.32771 13.5705 9.32771 13.4229C9.32771 13.2753 9.35821 13.1291 9.41746 12.9928C9.4767 12.8565 9.56351 12.7329 9.67288 12.6289L15.5075 7.03739C15.6163 6.93313 15.7455 6.85042 15.8876 6.79399C16.0298 6.73756 16.1821 6.70851 16.336 6.70851C16.4899 6.70851 16.6422 6.73756 16.7844 6.79399C16.9266 6.85042 17.0557 6.93313 17.1645 7.03739C17.2733 7.14166 17.3596 7.26545 17.4185 7.40168C17.4774 7.53792 17.5077 7.68393 17.5077 7.83139C17.5077 7.97885 17.4774 8.12486 17.4185 8.26109C17.3596 8.39733 17.2733 8.52111 17.1645 8.62538L12.1468 13.4229L17.1645 18.2204Z"
fill=
"#E6F6FF"
/>
</svg>
assets/svg/crm/calendar_left_ic.svg
0 → 100644
View file @
e079c6e8
<svg
width=
"26"
height=
"25"
viewBox=
"0 0 26 25"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<circle
cx=
"12.001"
cy=
"11.5"
r=
"9.38963"
fill=
"#1487C9"
/>
<path
d=
"M12 0.958008C9.82441 0.958008 7.69767 1.57627 5.88873 2.7346C4.07979 3.89293 2.66989 5.53932 1.83733 7.46555C1.00477 9.39179 0.786929 11.5114 1.21137 13.5563C1.6358 15.6011 2.68345 17.4795 4.22183 18.9538C5.76021 20.428 7.72022 21.432 9.85401 21.8388C11.9878 22.2455 14.1995 22.0368 16.2095 21.2389C18.2195 20.441 19.9375 19.0899 21.1462 17.3563C22.3549 15.6227 23 13.5846 23 11.4997C23 8.70385 21.8411 6.02254 19.7782 4.04559C17.7153 2.06864 14.9174 0.958008 12 0.958008ZM14.71 15.6109C14.8037 15.7 14.8781 15.806 14.9289 15.9228C14.9797 16.0396 15.0058 16.1648 15.0058 16.2913C15.0058 16.4179 14.9797 16.5431 14.9289 16.6599C14.8781 16.7767 14.8037 16.8827 14.71 16.9718C14.617 17.0616 14.5064 17.1329 14.3846 17.1815C14.2627 17.2302 14.132 17.2552 14 17.2552C13.868 17.2552 13.7373 17.2302 13.6154 17.1815C13.4936 17.1329 13.383 17.0616 13.29 16.9718L8.29 12.1801C8.19628 12.091 8.12188 11.985 8.07111 11.8682C8.02034 11.7514 7.99421 11.6262 7.99421 11.4997C7.99421 11.3732 8.02034 11.2479 8.07111 11.1311C8.12188 11.0143 8.19628 10.9083 8.29 10.8193L13.29 6.02759C13.3832 5.93824 13.4939 5.86736 13.6158 5.819C13.7376 5.77064 13.8681 5.74575 14 5.74575C14.1319 5.74575 14.2624 5.77064 14.3843 5.819C14.5061 5.86736 14.6168 5.93824 14.71 6.02759C14.8032 6.11694 14.8772 6.22302 14.9277 6.33977C14.9781 6.45651 15.0041 6.58164 15.0041 6.70801C15.0041 6.83437 14.9781 6.9595 14.9277 7.07625C14.8772 7.19299 14.8032 7.29907 14.71 7.38842L10.41 11.4997L14.71 15.6109Z"
fill=
"#E6F6FF"
/>
</svg>
assets/svg/crm/calendar_right.svg
0 → 100644
View file @
e079c6e8
<svg
width=
"28"
height=
"27"
viewBox=
"0 0 28 27"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<circle
cx=
"14.0077"
cy=
"13.4164"
r=
"10.957"
fill=
"#1487C9"
/>
<path
d=
"M14.0076 25.7183C16.5463 25.7183 19.0281 24.9968 21.139 23.6451C23.2499 22.2934 24.8951 20.3722 25.8667 18.1245C26.8382 15.8767 27.0924 13.4033 26.5971 11.0171C26.1018 8.63087 24.8793 6.43898 23.0841 4.71862C21.289 2.99825 19.0018 1.82666 16.5118 1.35202C14.0218 0.877366 11.4409 1.12097 9.09542 2.05203C6.74992 2.98309 4.74518 4.55977 3.33473 6.58271C1.92428 8.60565 1.17145 10.984 1.17145 13.417C1.17145 16.6795 2.52382 19.8083 4.93107 22.1153C7.33831 24.4222 10.6032 25.7183 14.0076 25.7183ZM10.8452 8.61944C10.7359 8.51548 10.6491 8.3918 10.5898 8.25552C10.5306 8.11925 10.5001 7.97308 10.5001 7.82545C10.5001 7.67782 10.5306 7.53165 10.5898 7.39538C10.6491 7.2591 10.7359 7.13542 10.8452 7.03146C10.9537 6.92664 11.0828 6.84344 11.225 6.78667C11.3672 6.7299 11.5197 6.70067 11.6738 6.70067C11.8278 6.70067 11.9803 6.7299 12.1225 6.78667C12.2647 6.84345 12.3938 6.92664 12.5023 7.03146L18.3369 12.623C18.4463 12.7269 18.5331 12.8506 18.5923 12.9869C18.6516 13.1232 18.6821 13.2693 18.6821 13.417C18.6821 13.5646 18.6516 13.7108 18.5923 13.847C18.5331 13.9833 18.4463 14.107 18.3369 14.2109L12.5023 19.8025C12.3935 19.9067 12.2643 19.9894 12.1221 20.0459C11.98 20.1023 11.8276 20.1313 11.6738 20.1313C11.5199 20.1313 11.3675 20.1023 11.2254 20.0459C11.0832 19.9894 10.954 19.9067 10.8452 19.8025C10.7364 19.6982 10.6501 19.5744 10.5912 19.4382C10.5324 19.3019 10.5021 19.1559 10.5021 19.0085C10.5021 18.861 10.5324 18.715 10.5912 18.5788C10.6501 18.4425 10.7364 18.3187 10.8452 18.2145L15.863 13.417L10.8452 8.61944Z"
fill=
"#E6F6FF"
/>
</svg>
assets/svg/crm/calendar_right_ic.svg
0 → 100644
View file @
e079c6e8
<svg
width=
"26"
height=
"25"
viewBox=
"0 0 26 25"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<circle
cx=
"12.001"
cy=
"11.5"
r=
"9.38963"
fill=
"#1487C9"
/>
<path
d=
"M12.8357 24.6025C15.3745 24.6025 17.8562 23.8811 19.9671 22.5294C22.078 21.1777 23.7232 19.2565 24.6948 17.0087C25.6663 14.761 25.9205 12.2876 25.4252 9.90137C24.9299 7.51515 23.7074 5.32326 21.9122 3.60289C20.1171 1.88252 17.8299 0.710941 15.3399 0.236293C12.85 -0.238356 10.269 0.00525121 7.92354 0.936308C5.57804 1.86736 3.57331 3.44405 2.16285 5.46699C0.7524 7.48993 -0.000426913 9.86826 -0.000427126 12.3012C-0.000427411 15.5637 1.35195 18.6926 3.75919 20.9996C6.16644 23.3065 9.43136 24.6025 12.8357 24.6025ZM9.67336 7.50372C9.56399 7.39976 9.47718 7.27608 9.41793 7.1398C9.35869 7.00353 9.32819 6.85736 9.32819 6.70973C9.32819 6.5621 9.35869 6.41593 9.41793 6.27966C9.47718 6.14338 9.56399 6.0197 9.67336 5.91574C9.78184 5.81092 9.91091 5.72772 10.0531 5.67095C10.1953 5.61417 10.3478 5.58494 10.5019 5.58494C10.6559 5.58494 10.8084 5.61417 10.9506 5.67095C11.0928 5.72772 11.2219 5.81092 11.3304 5.91574L17.165 11.5072C17.2744 11.6112 17.3612 11.7349 17.4204 11.8712C17.4797 12.0074 17.5102 12.1536 17.5102 12.3012C17.5102 12.4489 17.4797 12.595 17.4204 12.7313C17.3612 12.8676 17.2744 12.9913 17.165 13.0952L11.3304 18.6867C11.2216 18.791 11.0924 18.8737 10.9503 18.9301C10.8081 18.9866 10.6557 19.0156 10.5019 19.0156C10.348 19.0156 10.1956 18.9866 10.0535 18.9301C9.91133 18.8737 9.78216 18.791 9.67336 18.6867C9.56456 18.5825 9.47825 18.4587 9.41937 18.3224C9.36049 18.1862 9.33018 18.0402 9.33018 17.8927C9.33018 17.7453 9.36049 17.5993 9.41937 17.463C9.47825 17.3268 9.56456 17.203 9.67336 17.0987L14.6911 12.3012L9.67336 7.50372Z"
fill=
"#E6F6FF"
/>
</svg>
assets/svg/crm/payment_details_ic.svg
0 → 100644
View file @
e079c6e8
<svg
width=
"37"
height=
"37"
viewBox=
"0 0 37 37"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<circle
cx=
"18.208"
cy=
"18.208"
r=
"18.208"
fill=
"#E6F6FF"
/>
<g
clip-path=
"url(#clip0_300_4649)"
>
<path
d=
"M27.2693 18.5234C27.2693 23.6837 23.086 27.8669 17.9257 27.8669C12.7653 27.8669 8.58203 23.6837 8.58203 18.5234C8.58203 13.3629 12.7653 9.17969 17.9257 9.17969C23.086 9.17969 27.2693 13.3629 27.2693 18.5234Z"
fill=
"#FFC107"
/>
<path
d=
"M19.8375 22.769C19.7136 22.769 19.5894 22.7334 19.4792 22.6586L14.8072 19.4732C14.5771 19.3153 14.4752 19.0265 14.5576 18.7588C14.6399 18.4913 14.8872 18.3095 15.1665 18.3095H17.0777C17.8975 18.3095 18.5643 17.6427 18.5643 16.8231C18.5643 16.0034 17.8975 15.3366 17.0777 15.3366H15.1665C14.8149 15.3366 14.5295 15.0512 14.5295 14.6996C14.5295 14.3479 14.8149 14.0625 15.1665 14.0625H17.0777C18.5999 14.0625 19.8385 15.3009 19.8385 16.8231C19.8385 18.295 18.6797 19.5021 17.2264 19.5802L20.1977 21.6062C20.4883 21.804 20.5629 22.2008 20.3651 22.4912C20.2419 22.6713 20.0414 22.769 19.8375 22.769Z"
fill=
"#FAFAFA"
/>
<path
d=
"M20.6877 15.3366H15.1664C14.8147 15.3366 14.5293 15.0512 14.5293 14.6996C14.5293 14.3479 14.8147 14.0625 15.1664 14.0625H20.6877C21.0393 14.0625 21.3247 14.3479 21.3247 14.6996C21.3247 15.0512 21.0393 15.3366 20.6877 15.3366Z"
fill=
"#FAFAFA"
/>
<path
d=
"M20.6877 17.6726H15.1664C14.8147 17.6726 14.5293 17.3872 14.5293 17.0355C14.5293 16.6838 14.8147 16.3984 15.1664 16.3984H20.6877C21.0393 16.3984 21.3247 16.6838 21.3247 17.0355C21.3247 17.3872 21.0393 17.6726 20.6877 17.6726Z"
fill=
"#FAFAFA"
/>
</g>
<defs>
<clipPath
id=
"clip0_300_4649"
>
<rect
width=
"18.6873"
height=
"18.6873"
fill=
"white"
transform=
"translate(8.58203 9.17969)"
/>
</clipPath>
</defs>
</svg>
lib/Models/crmModels/appointmentCalendarResponse.dart
0 → 100644
View file @
e079c6e8
class
appointmentCalendarResponse
{
List
<
Appointments
>?
appointments
;
String
?
error
;
String
?
message
;
int
?
sessionExists
;
appointmentCalendarResponse
({
this
.
appointments
,
this
.
error
,
this
.
message
,
this
.
sessionExists
,
});
appointmentCalendarResponse
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
if
(
json
[
'appointments'
]
!=
null
)
{
appointments
=
<
Appointments
>[];
json
[
'appointments'
].
forEach
((
v
)
{
appointments
!.
add
(
new
Appointments
.
fromJson
(
v
));
});
}
error
=
json
[
'error'
];
message
=
json
[
'message'
];
sessionExists
=
json
[
'session_exists'
];
}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
if
(
this
.
appointments
!=
null
)
{
data
[
'appointments'
]
=
this
.
appointments
!.
map
((
v
)
=>
v
.
toJson
()).
toList
();
}
data
[
'error'
]
=
this
.
error
;
data
[
'message'
]
=
this
.
message
;
data
[
'session_exists'
]
=
this
.
sessionExists
;
return
data
;
}
}
class
Appointments
{
String
?
empId
;
String
?
id
;
String
?
leadId
;
String
?
appDate
;
String
?
name
;
String
?
product
;
String
?
mob1
;
Appointments
({
this
.
empId
,
this
.
id
,
this
.
leadId
,
this
.
appDate
,
this
.
name
,
this
.
product
,
this
.
mob1
,
});
Appointments
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
empId
=
json
[
'emp_id'
];
id
=
json
[
'id'
];
leadId
=
json
[
'lead_id'
];
appDate
=
json
[
'app_date'
];
name
=
json
[
'name'
];
product
=
json
[
'product'
];
mob1
=
json
[
'mob1'
];
}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
data
[
'emp_id'
]
=
this
.
empId
;
data
[
'id'
]
=
this
.
id
;
data
[
'lead_id'
]
=
this
.
leadId
;
data
[
'app_date'
]
=
this
.
appDate
;
data
[
'name'
]
=
this
.
name
;
data
[
'product'
]
=
this
.
product
;
data
[
'mob1'
]
=
this
.
mob1
;
return
data
;
}
}
lib/Models/crmModels/crmProspectDetailsAddLeadsResponse.dart
View file @
e079c6e8
class
crmProspectDetailsAddLeadsResponse
{
class
crmProspectDetailsAddLeadsResponse
{
List
<
Employees
>?
employees
;
List
<
Lead
Employees
>?
employees
;
List
<
Products
>?
products
;
List
<
Products
>?
products
;
List
<
String
>?
status
;
List
<
String
>?
status
;
String
?
error
;
String
?
error
;
...
@@ -10,9 +10,9 @@ class crmProspectDetailsAddLeadsResponse {
...
@@ -10,9 +10,9 @@ class crmProspectDetailsAddLeadsResponse {
crmProspectDetailsAddLeadsResponse
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
crmProspectDetailsAddLeadsResponse
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
if
(
json
[
'employees'
]
!=
null
)
{
if
(
json
[
'employees'
]
!=
null
)
{
employees
=
<
Employees
>[];
employees
=
<
Lead
Employees
>[];
json
[
'employees'
].
forEach
((
v
)
{
json
[
'employees'
].
forEach
((
v
)
{
employees
!.
add
(
new
Employees
.
fromJson
(
v
));
employees
!.
add
(
new
Lead
Employees
.
fromJson
(
v
));
});
});
}
}
if
(
json
[
'products'
]
!=
null
)
{
if
(
json
[
'products'
]
!=
null
)
{
...
@@ -41,13 +41,13 @@ class crmProspectDetailsAddLeadsResponse {
...
@@ -41,13 +41,13 @@ class crmProspectDetailsAddLeadsResponse {
}
}
}
}
class
Employees
{
class
Lead
Employees
{
String
?
id
;
String
?
id
;
String
?
name
;
String
?
name
;
Employees
({
this
.
id
,
this
.
name
});
Lead
Employees
({
this
.
id
,
this
.
name
});
Employees
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
Lead
Employees
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
id
=
json
[
'id'
];
id
=
json
[
'id'
];
name
=
json
[
'name'
];
name
=
json
[
'name'
];
}
}
...
...
lib/Notifiers/crmProvider/addProspectLeadsProvider.dart
View file @
e079c6e8
...
@@ -11,14 +11,18 @@ class Addprospectleadsprovider extends ChangeNotifier {
...
@@ -11,14 +11,18 @@ class Addprospectleadsprovider extends ChangeNotifier {
TextEditingController
searchController
=
TextEditingController
();
TextEditingController
searchController
=
TextEditingController
();
List
<
Products
>
_leadProductsList
=
[];
List
<
Products
>
_leadProductsList
=
[];
List
<
Employees
>
_employeeList
=
[];
List
<
Lead
Employees
>
_employeeList
=
[];
List
<
String
>
_statusList
=
[];
List
<
String
>
_statusList
=
[];
Employees
?
_selectedEmployees
;
Lead
Employees
?
_selectedEmployees
;
String
?
_selectedStatus
;
String
?
_selectedStatus
;
String
?
_selectedEmployeeId
;
String
?
_selectedEmployeeId
;
String
?
_selectedEmployeeValue
;
String
?
_selectedEmployeeValue
;
Products
?
_selectedProducts
;
Products
?
_selectedProducts
;
TextEditingController
addLeadProductPriceController
=
TextEditingController
();
TextEditingController
addLeadProductQtyController
=
TextEditingController
();
TextEditingController
addLeadProductTotalPriceController
=
TextEditingController
();
List
<
TextEditingController
>
editProductPriceControllers
=
[];
List
<
TextEditingController
>
editProductPriceControllers
=
[];
List
<
TextEditingController
>
editQuantityControllers
=
[];
List
<
TextEditingController
>
editQuantityControllers
=
[];
List
<
TextEditingController
>
editTotalAmountControllers
=
[];
List
<
TextEditingController
>
editTotalAmountControllers
=
[];
...
@@ -31,15 +35,15 @@ class Addprospectleadsprovider extends ChangeNotifier {
...
@@ -31,15 +35,15 @@ class Addprospectleadsprovider extends ChangeNotifier {
List
<
String
?>
get
selectedProductIds
=>
_selectedProductIds
;
List
<
String
?>
get
selectedProductIds
=>
_selectedProductIds
;
List
<
String
?>
get
selectedValues
=>
_selectedValues
;
List
<
String
?>
get
selectedValues
=>
_selectedValues
;
bool
get
submitLoading
=>
_submitLoading
;
bool
get
submitLoading
=>
_submitLoading
;
List
<
Employees
>
get
employeeList
=>
_employeeList
;
List
<
Lead
Employees
>
get
employeeList
=>
_employeeList
;
List
<
String
>
get
statusList
=>
_statusList
;
List
<
String
>
get
statusList
=>
_statusList
;
Employees
?
get
selectedEmployee
=>
_selectedEmployees
;
Lead
Employees
?
get
selectedEmployee
=>
_selectedEmployees
;
String
?
get
selectedStatus
=>
_selectedStatus
;
String
?
get
selectedStatus
=>
_selectedStatus
;
String
?
get
selectedEmployeeId
=>
_selectedEmployeeId
;
String
?
get
selectedEmployeeId
=>
_selectedEmployeeId
;
String
?
get
selectedEmployeeValue
=>
_selectedEmployeeValue
;
String
?
get
selectedEmployeeValue
=>
_selectedEmployeeValue
;
set
selectedEmployee
(
Employees
?
value
){
set
selectedEmployee
(
Lead
Employees
?
value
){
_selectedEmployees
=
value
;
_selectedEmployees
=
value
;
_selectedEmployeeId
=
value
!.
id
!;
_selectedEmployeeId
=
value
!.
id
!;
_selectedEmployeeValue
=
value
!.
name
!;
_selectedEmployeeValue
=
value
!.
name
!;
...
@@ -171,10 +175,20 @@ class Addprospectleadsprovider extends ChangeNotifier {
...
@@ -171,10 +175,20 @@ class Addprospectleadsprovider extends ChangeNotifier {
final
insertedData
=
getFormData
();
final
insertedData
=
getFormData
();
print
(
"Form Data:
$insertedData
"
);
print
(
"Form Data:
$insertedData
"
);
//
crmProspectDetailsAddLeadsSubmitAPIFunction(context,mode,accId,empID,insertedData,status);
crmProspectDetailsAddLeadsSubmitAPIFunction
(
context
,
mode
,
accId
,
empID
,
insertedData
,
status
);
submitLoading
=
false
;
submitLoading
=
false
;
}
}
onChnageProductPrice
(
value
){
notifyListeners
();
}
onChnageProductQty
(
value
){
notifyListeners
();
}
onChnageProductTotalPrice
(
value
){
notifyListeners
();
}
void
resetForm
()
{
void
resetForm
()
{
searchController
.
clear
();
searchController
.
clear
();
editProductPriceControllers
.
clear
();
editProductPriceControllers
.
clear
();
...
...
lib/Notifiers/crmProvider/appointmentCalendarProvider.dart
0 → 100644
View file @
e079c6e8
import
'package:flutter/material.dart'
;
import
'package:generp/Models/crmModels/appointmentCalendarResponse.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:provider/provider.dart'
;
import
'../../services/api_calling.dart'
;
import
'../HomeScreenNotifier.dart'
;
class
Appointmentcalendarprovider
extends
ChangeNotifier
{
bool
_isLoading
=
false
;
List
<
Appointments
>
_appointmentsList
=
[];
DateTime
?
_selectedDate
;
String
?
_selectedFollowUpType
;
bool
get
isLoading
=>
_isLoading
;
String
?
get
selectedFollowUpType
=>
_selectedFollowUpType
;
List
<
Appointments
>
get
appointmentList
=>
_appointmentsList
;
DateTime
?
get
selectedDate
=>
_selectedDate
;
set
selectedFollowUpType
(
String
?
value
){
_selectedFollowUpType
=
value
;
notifyListeners
();
}
set
isLoading
(
bool
value
){
_isLoading
=
value
;
notifyListeners
();
}
void
setSelectedDate
(
DateTime
date
)
{
_selectedDate
=
date
;
notifyListeners
();
}
Future
<
void
>
crmAppointmentCalendarAPIFunction
(
context
,
date
,
type
)
async
{
try
{
var
HomeProv
=
Provider
.
of
<
HomescreenNotifier
>(
context
,
listen:
false
);
final
data
=
await
ApiCalling
.
crmAppointmentCalendarAPI
(
HomeProv
.
empId
,
HomeProv
.
session
,
date
,
type
);
_isLoading
=
true
;
notifyListeners
();
if
(
data
!=
null
)
{
if
(
data
.
error
==
"0"
)
{
_isLoading
=
false
;
_appointmentsList
=
data
.
appointments
!;
notifyListeners
();
}
else
{
toast
(
context
,
data
.
message
);
_isLoading
=
false
;
notifyListeners
();
}
}
else
{
_isLoading
=
false
;
notifyListeners
();
}
}
catch
(
e
,
s
)
{
_isLoading
=
false
;
notifyListeners
();
}
}
}
lib/Notifiers/crmProvider/crmProspectDetailsProvider.dart
View file @
e079c6e8
...
@@ -21,6 +21,8 @@ class crmProspectDetailsProvider extends ChangeNotifier {
...
@@ -21,6 +21,8 @@ class crmProspectDetailsProvider extends ChangeNotifier {
bool
_isLoading
=
false
;
bool
_isLoading
=
false
;
bool
_showMoreDetails
=
false
;
TextEditingController
nameController
=
TextEditingController
();
TextEditingController
nameController
=
TextEditingController
();
TextEditingController
designationController
=
TextEditingController
();
TextEditingController
designationController
=
TextEditingController
();
TextEditingController
mobileNumberController
=
TextEditingController
();
TextEditingController
mobileNumberController
=
TextEditingController
();
...
@@ -57,7 +59,7 @@ class crmProspectDetailsProvider extends ChangeNotifier {
...
@@ -57,7 +59,7 @@ class crmProspectDetailsProvider extends ChangeNotifier {
List
<
String
>
_subHeadings
=
[];
List
<
String
>
_subHeadings
=
[];
DateTime
?
_date
;
DateTime
?
_date
;
String
?
_formattedDate
;
String
?
_formattedDate
;
bool
get
showMoreDetails
=>
_showMoreDetails
;
get
showTransferAccount
=>
_transferAccount
;
get
showTransferAccount
=>
_transferAccount
;
List
<
Leads
>
get
leadList
=>
_leadsList
;
List
<
Leads
>
get
leadList
=>
_leadsList
;
...
@@ -92,6 +94,10 @@ class crmProspectDetailsProvider extends ChangeNotifier {
...
@@ -92,6 +94,10 @@ class crmProspectDetailsProvider extends ChangeNotifier {
String
?
get
formattedDate
=>
_formattedDate
;
String
?
get
formattedDate
=>
_formattedDate
;
set
showMoreDetails
(
bool
value
){
_showMoreDetails
=
value
;
notifyListeners
();
}
set
nameError
(
String
?
value
){
set
nameError
(
String
?
value
){
_nameError
=
value
;
_nameError
=
value
;
...
@@ -193,13 +199,16 @@ class crmProspectDetailsProvider extends ChangeNotifier {
...
@@ -193,13 +199,16 @@ class crmProspectDetailsProvider extends ChangeNotifier {
_paymentsList
=
data
.
payments
!;
_paymentsList
=
data
.
payments
!;
_headings
=
[
_headings
=
[
"Company Name"
,
"Company Name"
,
"Address"
,
"Account Manager Name"
,
"Account Manager Name"
,
"Account Created By"
,
"Account Created By"
,
"Address"
,
"State"
,
"State"
,
"District"
,
"District"
,
"Sub Locality"
,
"Sub Locality"
,
"Pincode"
,
"Pin-code"
,
"Source"
,
"Source"
,
"Reference"
,
"Reference"
,
"Team"
,
"Team"
,
...
@@ -209,13 +218,16 @@ class crmProspectDetailsProvider extends ChangeNotifier {
...
@@ -209,13 +218,16 @@ class crmProspectDetailsProvider extends ChangeNotifier {
_transferAccount
=
data
.
showTransfeLeadButton
;
_transferAccount
=
data
.
showTransfeLeadButton
;
_subHeadings
=
[
_subHeadings
=
[
data
.
accountDetails
!.
name
??
"-"
,
data
.
accountDetails
!.
name
??
"-"
,
data
.
accountDetails
!.
address
??
"-"
,
data
.
accountDetails
!.
accManager
??
"-"
,
data
.
accountDetails
!.
accManager
??
"-"
,
data
.
accountDetails
!.
owner
??
"-"
,
data
.
accountDetails
!.
owner
??
"-"
,
data
.
accountDetails
!.
address
??
"-"
,
data
.
accountDetails
!.
state
??
"-"
,
data
.
accountDetails
!.
state
??
"-"
,
data
.
accountDetails
!.
district
??
"-"
,
data
.
accountDetails
!.
district
??
"-"
,
data
.
accountDetails
!.
subLocality
??
"-"
,
data
.
accountDetails
!.
subLocality
??
"-"
,
data
.
accountDetails
!.
pincode
??
"-"
,
data
.
accountDetails
!.
pincode
??
"-"
,
data
.
accountDetails
!.
source
??
"-"
,
data
.
accountDetails
!.
source
??
"-"
,
data
.
accountDetails
!.
reference
??
"-"
,
data
.
accountDetails
!.
reference
??
"-"
,
data
.
accountDetails
!.
team
??
"-"
,
data
.
accountDetails
!.
team
??
"-"
,
...
@@ -415,6 +427,7 @@ class crmProspectDetailsProvider extends ChangeNotifier {
...
@@ -415,6 +427,7 @@ class crmProspectDetailsProvider extends ChangeNotifier {
}
}
void
resetAll
(){
void
resetAll
(){
_showMoreDetails
=
false
;
nameController
.
clear
();
nameController
.
clear
();
designationController
.
clear
();
designationController
.
clear
();
mobileNumberController
.
clear
();
mobileNumberController
.
clear
();
...
...
lib/main.dart
View file @
e079c6e8
...
@@ -221,6 +221,7 @@ class MyApp extends StatelessWidget {
...
@@ -221,6 +221,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider
(
create:
(
_
)
=>
Editorderprovider
()),
ChangeNotifierProvider
(
create:
(
_
)
=>
Editorderprovider
()),
ChangeNotifierProvider
(
create:
(
_
)
=>
Dispatchorderprovider
()),
ChangeNotifierProvider
(
create:
(
_
)
=>
Dispatchorderprovider
()),
ChangeNotifierProvider
(
create:
(
_
)
=>
followUpUpdateProvider
()),
ChangeNotifierProvider
(
create:
(
_
)
=>
followUpUpdateProvider
()),
ChangeNotifierProvider
(
create:
(
_
)
=>
Appointmentcalendarprovider
()),
],
],
child:
Builder
(
child:
Builder
(
builder:
(
BuildContext
context
)
{
builder:
(
BuildContext
context
)
{
...
...
lib/screens/crm/LeadDetailsByMode.dart
View file @
e079c6e8
...
@@ -102,32 +102,33 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -102,32 +102,33 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
return
Consumer2
<
crmLeadDetailsProvider
,
Editproductlistprovider
>(
return
Consumer2
<
crmLeadDetailsProvider
,
Editproductlistprovider
>(
builder:
(
context
,
provider
,
editProvider
,
child
)
{
builder:
(
context
,
provider
,
editProvider
,
child
)
{
var
leadDetails
=
provider
.
leadDetails
;
var
leadDetails
=
provider
.
leadDetails
;
var
accDetails
=
provider
.
accountDetails
;
var
headings1
=
[
"Account Manager Name"
,
"Account Created By"
];
var
headings1
=
[
"Account Manager Name"
,
"Account Created By"
];
var
subHeadings1
=
[
var
subHeadings1
=
[
provider
.
account
Details
!
.
accManager
??
"-"
,
acc
Details
.
accManager
??
"-"
,
provider
.
account
Details
!
.
owner
??
"-"
,
acc
Details
.
owner
??
"-"
,
];
];
var
headings2
=
[
"Address"
,
"State"
,
"District"
,
"Sub Locality"
];
var
headings2
=
[
"Address"
,
"State"
,
"District"
,
"Sub Locality"
];
var
subHeadings2
=
[
var
subHeadings2
=
[
provider
.
leadDetails
!
.
address
??
"-"
,
leadDetails
.
address
??
"-"
,
provider
.
account
Details
!
.
state
??
"-"
,
acc
Details
.
state
??
"-"
,
provider
.
account
Details
!
.
district
??
"-"
,
acc
Details
.
district
??
"-"
,
provider
.
account
Details
!
.
subLocality
??
"-"
,
acc
Details
.
subLocality
??
"-"
,
];
];
var
headings3
=
[
"Source"
,
"Reference"
,
"Team"
,
"Segment"
];
var
headings3
=
[
"Source"
,
"Reference"
,
"Team"
,
"Segment"
];
var
subHeadings3
=
[
var
subHeadings3
=
[
provider
.
account
Details
!
.
source
??
"-"
,
acc
Details
.
source
??
"-"
,
provider
.
account
Details
!
.
reference
??
"-"
,
acc
Details
.
reference
??
"-"
,
provider
.
account
Details
!
.
team
??
"-"
,
acc
Details
.
team
??
"-"
,
provider
.
account
Details
!
.
segment
??
"-"
,
acc
Details
.
segment
??
"-"
,
];
];
var
headings4
=
[
"Lead Status"
,
"Last Followup Date"
,
"Lead Age"
];
var
headings4
=
[
"Lead Status"
,
"Last Followup Date"
,
"Lead Age"
];
var
subHeadings4
=
[
var
subHeadings4
=
[
provider
.
leadDetails
!
.
status
??
"-"
,
leadDetails
.
status
??
"-"
,
provider
.
leadDetails
!
.
date
??
"-"
,
leadDetails
.
date
??
"-"
,
"
${
provider.
leadDetails
!
.lage ?? "-"}
days"
,
"
${leadDetails.lage ?? "-"}
days"
,
];
];
// var totalHeadings = [];
// var totalHeadings = [];
// var totalSubHeadings = [];
// var totalSubHeadings = [];
...
@@ -195,16 +196,16 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -195,16 +196,16 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
),
),
),
),
),
),
Spacer
(),
//
Spacer(),
InkResponse
(
//
InkResponse(
onTap:
()
{
//
onTap: () {
_showOptionsSheet
(
context
);
//
_showOptionsSheet(context);
},
//
},
child:
SvgPicture
.
asset
(
//
child: SvgPicture.asset(
"assets/svg/ic_more.svg"
,
//
"assets/svg/ic_more.svg",
height:
30
,
//
height: 30,
),
//
),
),
//
),
],
],
),
),
),
),
...
@@ -2453,6 +2454,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -2453,6 +2454,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
return
SafeArea
(
return
SafeArea
(
child:
Consumer2
<
crmLeadDetailsProvider
,
Editproductlistprovider
>(
child:
Consumer2
<
crmLeadDetailsProvider
,
Editproductlistprovider
>(
builder:
(
context
,
provider
,
editProvider
,
child
)
{
builder:
(
context
,
provider
,
editProvider
,
child
)
{
void
updatedAmountfun
(
value
){
final
price
=
final
price
=
double
.
tryParse
(
double
.
tryParse
(
editProvider
.
addEditProductPriceController
.
text
,
editProvider
.
addEditProductPriceController
.
text
,
...
@@ -2465,6 +2467,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -2465,6 +2467,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
0
;
0
;
editProvider
.
addEditTotalAmountController
.
text
=
editProvider
.
addEditTotalAmountController
.
text
=
(
price
*
qty
).
toString
();
(
price
*
qty
).
toString
();
}
return
Container
(
return
Container
(
margin:
EdgeInsets
.
only
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
bottom:
15
,
...
@@ -2561,8 +2564,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -2561,8 +2564,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
editProvider
.
addEditProductPriceController
,
editProvider
.
addEditProductPriceController
,
"Product Price"
,
"Product Price"
,
"Enter Product Price"
,
"Enter Product Price"
,
(
value
)
=>
updatedAmountfun
,
editProvider
.
addEditUpdateTotalAmount
,
TextInputType
.
number
,
TextInputType
.
number
,
false
,
false
,
null
,
null
,
...
@@ -2580,8 +2582,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -2580,8 +2582,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
editProvider
.
addEditQuantityController
,
editProvider
.
addEditQuantityController
,
"Quantity"
,
"Quantity"
,
"Enter Quantity"
,
"Enter Quantity"
,
(
value
)
=>
updatedAmountfun
,
editProvider
.
addEditUpdateTotalAmount
,
TextInputType
.
number
,
TextInputType
.
number
,
false
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
FilteringTextInputFormatter
.
digitsOnly
,
...
...
lib/screens/crm/ProspectDetailsByMode.dart
View file @
e079c6e8
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:dotted_line/dotted_line.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
...
@@ -13,15 +14,19 @@ import 'package:generp/screens/crm/prospectContactDetails.dart';
...
@@ -13,15 +14,19 @@ import 'package:generp/screens/crm/prospectContactDetails.dart';
import
'package:generp/screens/crm/prospectLeadDetails.dart'
;
import
'package:generp/screens/crm/prospectLeadDetails.dart'
;
import
'package:generp/screens/crm/prospectOrderDetails.dart'
;
import
'package:generp/screens/crm/prospectOrderDetails.dart'
;
import
'package:generp/screens/crm/prospectPaymentDetails.dart'
;
import
'package:generp/screens/crm/prospectPaymentDetails.dart'
;
import
'package:get/get.dart'
;
import
'package:provider/provider.dart'
;
import
'package:provider/provider.dart'
;
import
'../../Models/crmModels/GetDistrictOnStateResponse.dart'
;
import
'../../Models/crmModels/GetDistrictOnStateResponse.dart'
;
import
'../../Models/crmModels/GetSubLocOnDistrictResponse.dart'
;
import
'../../Models/crmModels/GetSubLocOnDistrictResponse.dart'
;
import
'../../Models/crmModels/LeadListViewResponse.dart'
show
Employees
;
import
'../../Models/crmModels/LeadListViewResponse.dart'
show
Employees
;
import
'../../Models/crmModels/crmProspectDetailsAddLeadsResponse.dart'
show
LeadEmployees
,
Products
;
import
'../../Models/crmModels/crmProspectDetailsEditAccountViewResponse.dart'
;
import
'../../Models/crmModels/crmProspectDetailsEditAccountViewResponse.dart'
;
import
'../../Notifiers/crmProvider/addProspectLeadsProvider.dart'
;
import
'../../Notifiers/crmProvider/crmProspectDetailsProvider.dart'
;
import
'../../Notifiers/crmProvider/crmProspectDetailsProvider.dart'
;
import
'../../Utils/app_colors.dart'
;
import
'../../Utils/app_colors.dart'
;
import
'../../Utils/commonWidgets.dart'
;
import
'../../Utils/commonWidgets.dart'
;
import
'../order/ordersDetailsByModes.dart'
;
import
'../order/paymentDetailsByMode.dart'
;
import
'LeadDetailsByMode.dart'
;
class
ProspectDetailsByMode
extends
StatefulWidget
{
class
ProspectDetailsByMode
extends
StatefulWidget
{
final
mode
;
final
mode
;
...
@@ -201,35 +206,125 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -201,35 +206,125 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
}
}
Widget
_scaffold
(
BuildContext
context
)
{
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
2
<
return
Consumer
3
<
crmProspectDetailsProvider
,
crmProspectDetailsProvider
,
Crmeditprospectaccountprovider
Crmeditprospectaccountprovider
,
Addprospectleadsprovider
>(
>(
builder:
(
context
,
provider
,
editProvider
,
child
)
{
builder:
(
context
,
provider
,
editProvider
,
addleadProvider
,
child
)
{
var
leadDetails
=
provider
.
accountDetails
;
var
leadDetails
=
provider
.
accountDetails
;
final
leadsList
=
provider
.
leadList
;
final
orderList
=
provider
.
ordersList
;
final
paymentList
=
provider
.
paymentsList
;
var
headings1
=
[
"Account Manager Name"
,
"Account Created By"
];
var
subHeadings1
=
[
leadDetails
.
accManager
??
"-"
,
leadDetails
.
owner
??
"-"
,
];
var
headings2
=
[
"Address"
,
"State"
,
"District"
,
"Sub Locality"
,
"PinCode"
,
];
var
subHeadings2
=
[
leadDetails
!.
address
??
"-"
,
leadDetails
.
state
??
"-"
,
leadDetails
.
district
??
"-"
,
leadDetails
.
subLocality
??
"-"
,
leadDetails
.
pincode
??
"-"
,
];
var
headings3
=
[
"Source"
,
"Reference"
,
"Team"
,
"Segment"
];
var
subHeadings3
=
[
leadDetails
.
source
??
"-"
,
leadDetails
.
reference
??
"-"
,
leadDetails
.
team
??
"-"
,
leadDetails
.
segment
??
"-"
,
];
var
headings4
=
[
"Lead Age"
];
var
subHeadings4
=
[
"
${leadDetails!.aage ?? "-"}
days old"
];
return
Scaffold
(
return
Scaffold
(
resizeToAvoidBottomInset:
true
,
resizeToAvoidBottomInset:
true
,
appBar:
appbar2
(
appBar:
AppBar
(
context
,
toolbarHeight:
provider
.
showMoreDetails
?
25
:
40
,
widget
.
pageTitleName
,
backgroundColor:
Colors
.
white
,
provider
.
resetAll
,
automaticallyImplyLeading:
false
,
centerTitle:
false
,
elevation:
2.0
,
title:
SizedBox
(
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
[
InkResponse
(
InkResponse
(
onTap:
()
{
onTap:
()
{
_showOptionsSheet
(
context
);
provider
.
resetAll
();
Navigator
.
pop
(
context
,
true
);
},
},
child:
SvgPicture
.
asset
(
"assets/svg/ic_more.svg"
,
height:
30
),
child:
SvgPicture
.
asset
(
"assets/svg/appbar_back_button.svg"
,
height:
25
,
),
),
),
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
SizedBox
(
width:
10
),
body:
Container
(
Expanded
(
child:
SingleChildScrollView
(
flex:
4
,
child:
Container
(
child:
InkResponse
(
onTap:
()
{
provider
.
resetAll
();
Navigator
.
pop
(
context
,
true
);
},
child:
Text
(
"Account Details"
,
overflow:
TextOverflow
.
ellipsis
,
maxLines:
1
,
style:
TextStyle
(
fontSize:
16
,
height:
1.1
,
fontFamily:
"JakartaSemiBold"
,
color:
AppColors
.
semi_black
,
),
),
),
),
// Spacer(),
// InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: SvgPicture.asset(
// "assets/svg/ic_more.svg",
// height: 30,
// ),
// ),
],
),
),
bottom:
PreferredSize
(
preferredSize:
provider
.
showMoreDetails
?
Size
.
fromHeight
(
MediaQuery
.
of
(
context
).
size
.
height
*
0.72
,
)
:
Size
.
fromHeight
(
120
),
child:
Column
(
children:
[
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
8
),
child:
Divider
(
thickness:
0.5
,
color:
Color
(
0xFFD7D7D7
)),
),
Container
(
decoration:
BoxDecoration
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
borderRadius:
BorderRadius
.
vertical
(
bottom:
Radius
.
circular
(
30
),
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
),
// margin: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
child:
Column
(
child:
Column
(
children:
[
children:
[
...
@@ -240,13 +335,8 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -240,13 +335,8 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
child:
Container
(
child:
Container
(
height:
50
,
height:
50
,
width:
35
,
width:
35
,
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
8
),
),
child:
SvgPicture
.
asset
(
child:
SvgPicture
.
asset
(
"assets/svg/
se_block_head
.svg"
,
"assets/svg/
crm/lead_details_ic
.svg"
,
),
),
),
),
),
),
...
@@ -309,25 +399,233 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -309,25 +399,233 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
width:
30
,
width:
30
,
padding:
EdgeInsets
.
all
(
8.0
),
padding:
EdgeInsets
.
all
(
8.0
),
child:
SvgPicture
.
asset
(
child:
SvgPicture
.
asset
(
"assets/svg/crm_contact_edit.svg"
,
"assets/svg/crm/lead_details_edit_ic.svg"
,
),
),
),
),
],
),
),
Visibility
(
visible:
provider
.
showMoreDetails
?
true
:
false
,
child:
Column
(
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
4
),
child:
Row
(
children:
[
Expanded
(
flex:
3
,
child:
Text
(
"Account Details"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaSemiBold"
,
),
),
),
),
),
),
Expanded
(
flex:
6
,
child:
DottedLine
(
dashGapLength:
4
,
dashGapColor:
Colors
.
white
,
dashColor:
AppColors
.
grey_semi
,
dashLength:
2
,
lineThickness:
0.5
,
),
),
],
],
),
),
Divider
(
thickness:
0.5
,
color:
Color
(
0xFFD7D7D7
)
),
),
...
List
.
generate
(
provider
.
subHeadings
.
length
,
(
j
)
{
...
List
.
generate
(
subHeadings
1
.
length
,
(
j
)
{
return
Container
(
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
child:
Row
(
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
children:
[
Expanded
(
Expanded
(
child:
Text
(
child:
Text
(
provider
.
H
eadings
[
j
],
h
eadings
1
[
j
],
style:
TextStyle
(
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
child:
Text
(
subHeadings1
[
j
]
==
""
?
"-"
:
subHeadings1
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
],
),
);
}),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
4
),
child:
Row
(
children:
[
Expanded
(
flex:
3
,
child:
Text
(
"Address Details"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaSemiBold"
,
),
),
),
Expanded
(
flex:
6
,
child:
DottedLine
(
dashGapLength:
4
,
dashGapColor:
Colors
.
white
,
dashColor:
AppColors
.
grey_semi
,
dashLength:
2
,
lineThickness:
0.5
,
),
),
],
),
),
...
List
.
generate
(
subHeadings2
.
length
,
(
j
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
headings2
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
child:
Text
(
subHeadings2
[
j
]
==
""
?
"-"
:
subHeadings2
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
],
),
);
}),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
4
),
child:
Row
(
children:
[
Expanded
(
flex:
3
,
child:
Text
(
"Source Details"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaSemiBold"
,
),
),
),
Expanded
(
flex:
6
,
child:
DottedLine
(
dashGapLength:
4
,
dashGapColor:
Colors
.
white
,
dashColor:
AppColors
.
grey_semi
,
dashLength:
2
,
lineThickness:
0.5
,
),
),
],
),
),
...
List
.
generate
(
subHeadings3
.
length
,
(
j
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
headings3
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
child:
Text
(
subHeadings3
[
j
]
==
""
?
"-"
:
subHeadings3
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
],
),
);
}),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
4
),
child:
Row
(
children:
[
Expanded
(
flex:
3
,
child:
Text
(
"Lead Details"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaSemiBold"
,
),
),
),
Expanded
(
flex:
6
,
child:
DottedLine
(
dashGapLength:
4
,
dashGapColor:
Colors
.
white
,
dashColor:
AppColors
.
grey_semi
,
dashLength:
2
,
lineThickness:
0.5
,
),
),
],
),
),
...
List
.
generate
(
subHeadings4
.
length
,
(
j
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
headings4
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
color:
AppColors
.
semi_black
,
),
),
...
@@ -336,30 +634,34 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -336,30 +634,34 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
Expanded
(
Expanded
(
child:
InkResponse
(
child:
InkResponse
(
child:
child:
provider
.
Headings
[
j
]
==
"Lead Age"
sub
Headings
4
[
j
]
==
"Lead Age"
?
Tooltip
(
?
Tooltip
(
triggerMode:
TooltipTriggerMode
.
tap
,
triggerMode:
TooltipTriggerMode
.
tap
,
message:
message:
"
${provider.account
Details.createdDatetime}
"
,
"
${lead
Details.createdDatetime}
"
,
child:
Text
(
child:
Text
(
provider
.
subHeadings
[
j
]
==
""
subHeadings
4
[
j
]
==
""
?
"-"
?
"-"
:
provider
.
subHeadings
[
j
],
:
subHeadings
4
[
j
],
style:
TextStyle
(
style:
TextStyle
(
fontSize:
14
,
fontSize:
14
,
color:
Color
(
0xFF818181
),
color:
Color
(
0xFF818181
,
),
decorationColor:
decorationColor:
AppColors
.
grey_semi
,
AppColors
.
grey_semi
,
decoration:
decoration:
TextDecoration
.
underline
,
TextDecoration
.
underline
,
),
),
),
),
)
)
:
Text
(
:
Text
(
provider
.
subHeadings
[
j
]
==
""
subHeadings
4
[
j
]
==
""
?
"-"
?
"-"
:
provider
.
subHeadings
[
j
],
:
subHeadings
4
[
j
],
style:
TextStyle
(
style:
TextStyle
(
fontSize:
14
,
fontSize:
14
,
color:
Color
(
0xFF818181
),
color:
Color
(
0xFF818181
),
...
@@ -367,15 +669,1499 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -367,15 +669,1499 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
),
),
),
),
],
],
),
);
}),
],
),
),
InkResponse
(
onTap:
()
async
{
provider
.
showMoreDetails
=
!
provider
.
showMoreDetails
;
},
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Text
(
provider
.
showMoreDetails
?
"Hide Details"
:
"View Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
app_blue
,
),
),
Transform
.
flip
(
flipY:
provider
.
showMoreDetails
?
true
:
false
,
child:
SvgPicture
.
asset
(
"assets/svg/arrow_dropdown.svg"
,
height:
25
,
width:
20
,
color:
AppColors
.
app_blue
,
),
),
],
),
),
),
],
),
),
],
),
),
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
vertical
(
bottom:
Radius
.
circular
(
30
),
// Adjust the radius as needed
),
),
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
Container
(
child:
SingleChildScrollView
(
child:
Container
(
child:
Column
(
children:
[
///Lead Details
if
(
leadsList
.
isNotEmpty
)
...[
Container
(
padding:
EdgeInsets
.
only
(
left:
10
,
right:
10
,
top:
25
,
bottom:
5
,
),
child:
Row
(
children:
[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
left
,
"Lead Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
grey_thick
,
),
),
),
Expanded
(
child:
InkResponse
(
onTap:
()
async
{
await
addleadProvider
.
crmProspectDetailsAddLeadsViewAPIFunction
(
context
,
widget
.
mode
,
);
_showAddLeadsSheet
(
context
,
widget
.
mode
);
},
child:
Text
(
textAlign:
TextAlign
.
right
,
"+ Add Lead"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
app_blue
,
),
),
),
),
],
),
),
SizedBox
(
width:
double
.
infinity
,
height:
250
,
child:
ListView
.
builder
(
itemCount:
leadsList
.
length
,
shrinkWrap:
true
,
physics:
AlwaysScrollableScrollPhysics
(),
scrollDirection:
Axis
.
horizontal
,
itemBuilder:
(
context
,
index
)
{
return
Container
(
height:
250
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.95
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
1
,
child:
SvgPicture
.
asset
(
"assets/svg/crm/followup_details_ic.svg"
,
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
Text
(
"Lead ID"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
Text
(
"
${leadsList[index].id}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
grey_semi
,
),
),
],
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
2
,
child:
Container
(
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
color:
Color
(
0xFFF3FFD5
),
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
10
,
),
child:
Center
(
child:
Text
(
textAlign:
TextAlign
.
right
,
"
${leadsList[index].status ?? "-"}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
Color
(
0xFF586000
),
),
),
),
),
),
],
),
SizedBox
(
height:
5
,),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
4
),
child:
Row
(
children:
[
Expanded
(
flex:
3
,
child:
Text
(
"Lead Created"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaSemiBold"
,
),
),
),
Expanded
(
flex:
6
,
child:
DottedLine
(
dashGapLength:
4
,
dashGapColor:
Colors
.
white
,
dashColor:
AppColors
.
grey_semi
,
dashLength:
2
,
lineThickness:
0.5
,
),
),
],
),
),
...
List
.
generate
(
1
,
(
j
)
{
final
textheads
=
[
"Time"
];
final
textSubheads
=
[
leadsList
[
index
].
date
??
"-"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
left
,
textheads
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
right
,
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
],
),
);
}),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
4
),
child:
Row
(
children:
[
Expanded
(
flex:
3
,
child:
Text
(
"Lead Details"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaSemiBold"
,
),
),
),
Expanded
(
flex:
6
,
child:
DottedLine
(
dashGapLength:
4
,
dashGapColor:
Colors
.
white
,
dashColor:
AppColors
.
grey_semi
,
dashLength:
2
,
lineThickness:
0.5
,
),
),
],
),
),
...
List
.
generate
(
2
,
(
j
)
{
final
textheads
=
[
"Lead Open / Close"
,
"View Details"
,
];
final
textSubheads
=
[
leadsList
[
index
].
openStatus
??
"-"
,
"View"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
left
,
textheads
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
if
(
textSubheads
[
j
]
==
"View"
)
...[
Expanded
(
child:
InkResponse
(
onTap:
()
async
{
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
,
)
=>
LeadDetailsByMode
(
mode:
""
,
pageTitleName:
"Lead Details"
,
leadId:
widget
.
leadId
,
),
),
);
if
(
res
==
true
)
{
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
,
);
}
},
child:
Text
(
textAlign:
TextAlign
.
right
,
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
decorationColor:
AppColors
.
app_blue
,
decoration:
TextDecoration
.
underline
,
),
),
),
),
]
else
...[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
right
,
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
],
],
),
);
}),
],
),
);
},
),
),
],
///Contact Details
if
(
provider
.
contactList
.
isNotEmpty
)
...[
Container
(
padding:
EdgeInsets
.
only
(
left:
10
,
right:
10
,
top:
10
),
child:
Row
(
children:
[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
left
,
"Contact Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
grey_thick
,
),
),
),
Expanded
(
child:
InkResponse
(
onTap:
()
{
_showAddContactSheet
(
context
,
provider
.
accountDetails
.
id
!,
);
},
child:
Text
(
textAlign:
TextAlign
.
right
,
"+ Add Contact"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
app_blue
,
),
),
),
),
],
),
),
ListView
.
builder
(
physics:
NeverScrollableScrollPhysics
(),
shrinkWrap:
true
,
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
,
),
itemCount:
provider
.
contactList
.
length
,
itemBuilder:
(
context
,
lp
)
{
return
InkResponse
(
onTap:
()
async
{
provider
.
editNameController
.
text
=
provider
.
contactList
[
lp
].
name
??
""
;
provider
.
editDesignationController
.
text
=
provider
.
contactList
[
lp
].
designation
??
""
;
provider
.
editMobileNumberController
.
text
=
provider
.
contactList
[
lp
].
mob1
??
""
;
provider
.
editAlternativeMobileController
.
text
=
provider
.
contactList
[
lp
].
mob2
??
""
;
provider
.
editTelephoneController
.
text
=
provider
.
contactList
[
lp
].
tel
??
""
;
provider
.
editEmailController
.
text
=
provider
.
contactList
[
lp
].
email
??
""
;
_showEditContactSheet
(
context
,
lp
,
provider
.
accountDetails
.
id
!,
);
},
child:
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
14
),
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
margin:
EdgeInsets
.
symmetric
(
vertical:
5
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
1
,
child:
SvgPicture
.
asset
(
"assets/svg/crm/contact_details_ic.svg"
,
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
6
,
child:
SizedBox
(
child:
Column
(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
Row
(
children:
[
Expanded
(
flex:
4
,
child:
Text
(
provider
.
contactList
[
lp
]
.
name
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
flex:
2
,
child:
Text
(
textAlign:
TextAlign
.
right
,
"
${provider.contactList[lp].mob1 ?? "-"}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
],
),
Text
(
provider
.
contactList
[
lp
].
email
==
""
?
"-"
:
provider
.
contactList
[
lp
].
email
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
grey_semi
,
),
),
],
),
),
),
],
),
),
);
},
),
],
///Order Details
if
(
orderList
.
isNotEmpty
)
...[
Container
(
padding:
EdgeInsets
.
only
(
left:
10
,
right:
10
,
top:
10
),
child:
Row
(
children:
[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
left
,
"Order Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
grey_thick
,
),
),
),
],
),
),
SizedBox
(
width:
double
.
infinity
,
height:
250
,
child:
ListView
.
builder
(
itemCount:
orderList
.
length
,
shrinkWrap:
true
,
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
,
),
physics:
AlwaysScrollableScrollPhysics
(),
scrollDirection:
Axis
.
horizontal
,
itemBuilder:
(
context
,
index
)
{
return
Container
(
height:
250
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.95
,
margin:
EdgeInsets
.
symmetric
(
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
1
,
child:
SvgPicture
.
asset
(
"assets/svg/crm/product_details_ic.svg"
,
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
Text
(
"Order ID"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
Text
(
"
${orderList[index].id}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
grey_semi
,
),
),
],
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
2
,
child:
Container
(
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
color:
Color
(
0xFFF3FFD5
),
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
10
,
),
child:
Center
(
child:
Text
(
textAlign:
TextAlign
.
right
,
"
${orderList[index].status ?? "-"}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
Color
(
0xFF586000
),
),
),
),
),
),
],
),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
),
child:
Row
(
children:
[
Expanded
(
flex:
3
,
child:
Text
(
"Order Created"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaSemiBold"
,
),
),
),
Expanded
(
flex:
6
,
child:
DottedLine
(
dashGapLength:
4
,
dashGapColor:
Colors
.
white
,
dashColor:
AppColors
.
grey_semi
,
dashLength:
2
,
lineThickness:
0.5
,
),
),
],
),
),
...
List
.
generate
(
1
,
(
j
)
{
final
textheads
=
[
"Time"
];
final
textSubheads
=
[
orderList
[
index
].
createdDatetime
??
"-"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
left
,
textheads
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
right
,
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
],
),
);
}),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
4
),
child:
Row
(
children:
[
Expanded
(
flex:
3
,
child:
Text
(
"Order Details"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaSemiBold"
,
),
),
),
Expanded
(
flex:
6
,
child:
DottedLine
(
dashGapLength:
4
,
dashGapColor:
Colors
.
white
,
dashColor:
AppColors
.
grey_semi
,
dashLength:
2
,
lineThickness:
0.5
,
),
),
],
),
),
...
List
.
generate
(
1
,
(
j
)
{
final
textheads
=
[
"View Details"
,
];
final
textSubheads
=
[
"View"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
left
,
textheads
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
child:
InkResponse
(
onTap:
()
async
{
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
,
)
=>
Ordersdetailsbymodes
(
mode:
""
,
pageTitleName:
"Order Details"
,
orderId:
widget
.
leadId
,
),
),
);
if
(
res
==
true
)
{
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
,
);
}
},
child:
Text
(
textAlign:
TextAlign
.
right
,
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
decorationColor:
AppColors
.
app_blue
,
decoration:
TextDecoration
.
underline
,
),
),
),
),
],
),
);
}),
],
),
);
},
),
),
],
///Payment Details
if
(
paymentList
.
isNotEmpty
)
...[
Container
(
padding:
EdgeInsets
.
only
(
left:
10
,
right:
10
,
top:
10
),
child:
Row
(
children:
[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
left
,
"Payment Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
grey_thick
,
),
),
),
],
),
),
SizedBox
(
width:
double
.
infinity
,
height:
250
,
child:
ListView
.
builder
(
itemCount:
paymentList
.
length
,
shrinkWrap:
true
,
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
,
),
physics:
AlwaysScrollableScrollPhysics
(),
scrollDirection:
Axis
.
horizontal
,
itemBuilder:
(
context
,
index
)
{
return
Container
(
height:
250
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.95
,
margin:
EdgeInsets
.
symmetric
(
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
1
,
child:
SvgPicture
.
asset
(
"assets/svg/crm/payment_details_ic.svg"
,
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
Text
(
"
${paymentList[index].employeeName}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
Text
(
"₹
${paymentList[index].amount}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
grey_semi
,
),
),
],
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
2
,
child:
Container
(
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
color:
Color
(
0xFFF3FFD5
),
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
10
,
),
child:
Center
(
child:
Text
(
textAlign:
TextAlign
.
right
,
"
${paymentList[index].paymentType ?? "-"}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
Color
(
0xFF586000
),
),
),
),
),
),
],
),
SizedBox
(
height:
5
,),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
4
),
child:
Row
(
children:
[
Expanded
(
flex:
3
,
child:
Text
(
"Payment Details"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaSemiBold"
,
),
),
),
Expanded
(
flex:
6
,
child:
DottedLine
(
dashGapLength:
4
,
dashGapColor:
Colors
.
white
,
dashColor:
AppColors
.
grey_semi
,
dashLength:
2
,
lineThickness:
0.5
,
),
),
],
),
),
...
List
.
generate
(
2
,
(
j
)
{
final
textheads
=
[
"Payment Reference"
,
"Payment Received Date"
,
];
final
textSubheads
=
[
paymentList
[
index
].
refNo
??
"-"
,
paymentList
[
index
].
paymentDate
??
"-"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
left
,
textheads
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
right
,
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
],
),
);
}),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
),
child:
Row
(
children:
[
Expanded
(
flex:
3
,
child:
Text
(
"Others"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaSemiBold"
,
),
),
),
Expanded
(
flex:
6
,
child:
DottedLine
(
dashGapLength:
4
,
dashGapColor:
Colors
.
white
,
dashColor:
AppColors
.
grey_semi
,
dashLength:
2
,
lineThickness:
0.5
,
),
),
],
),
),
...
List
.
generate
(
1
,
(
j
)
{
final
textheads
=
[
"Action"
,
];
final
textSubheads
=
[
"View Details"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
left
,
textheads
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
child:
InkResponse
(
onTap:
()
async
{
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
,
)
=>
Paymentdetailsbymode
(
mode:
""
,
pageTitleName:
"Payment Details"
,
paymentId:
paymentList
[
index
].
id
,
),
),
);
if
(
res
==
true
)
{
provider
.
crmProspectDetailsAPIFunction
(
context
,
paymentList
[
index
].
id
,
);
}
},
child:
Text
(
textAlign:
TextAlign
.
right
,
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
decorationColor:
AppColors
.
app_blue
,
decoration:
TextDecoration
.
underline
,
),
),
),
),
],
),
);
}),
],
),
);
},
),
),
],
SizedBox
(
height:
75
),
],
),
),
),
),
);
},
);
}
Future
<
void
>
_showAddContactSheet
(
BuildContext
context
,
accID
)
{
return
showModalBottomSheet
(
useSafeArea:
true
,
isDismissible:
true
,
isScrollControlled:
true
,
showDragHandle:
true
,
backgroundColor:
Colors
.
white
,
enableDrag:
true
,
context:
context
,
builder:
(
context
)
{
return
StatefulBuilder
(
builder:
(
context
,
setState
)
{
return
SafeArea
(
child:
Consumer
<
crmProspectDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
left:
15
,
right:
15
,
top:
10
,
),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
),
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisSize:
MainAxisSize
.
min
,
children:
[
Align
(
alignment:
Alignment
.
topLeft
,
child:
Text
(
"Add Contact"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
16
,
),
),
),
textControllerWidget
(
context
,
provider
.
nameController
,
"Name"
,
"Enter Name"
,
provider
.
onChangeName
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
nameError
),
textControllerWidget
(
context
,
provider
.
designationController
,
"Designation"
,
"Enter Designation"
,
provider
.
onChangeDesignation
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
designationError
),
textControllerWidget
(
context
,
provider
.
mobileNumberController
,
"Mobile Number"
,
"Enter Mobile Number"
,
provider
.
onChangeMobile
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
mobileNumError
),
textControllerWidget
(
context
,
provider
.
alternativeMobileController
,
"Alternative Mobile Number"
,
"Enter Alternative Mobile Number"
,
provider
.
onChangeAltMobile
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
altMobError
),
textControllerWidget
(
context
,
provider
.
telephoneController
,
"Telephone Number"
,
"Enter Telephone Number"
,
provider
.
onChangeTelephone
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
teleError
),
textControllerWidget
(
context
,
provider
.
emailController
,
"Email ID"
,
"Enter Email ID"
,
provider
.
onChangeEmailId
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
emailError
),
InkWell
(
onTap:
provider
.
isLoading
?
null
:
()
{
provider
.
isLoading
=
true
;
provider
.
crmProspectDetailsAddContactAPIFunction
(
context
,
accID
,
);
},
child:
Container
(
alignment:
Alignment
.
center
,
height:
45
,
margin:
EdgeInsets
.
only
(
left:
5.0
,
right:
5.0
,
top:
5.0
,
bottom:
5.0
,
),
decoration:
BoxDecoration
(
color:
AppColors
.
app_blue
,
//1487C9
borderRadius:
BorderRadius
.
circular
(
14.0
),
),
child:
Center
(
child:
provider
.
isLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
,
),
)
:
Text
(
"Submit"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
),
),
),
),
),
],
),
),
);
},
),
);
},
);
},
);
}
Future
<
void
>
_showEditContactSheet
(
BuildContext
context
,
index
,
accid
)
{
return
showModalBottomSheet
(
useSafeArea:
true
,
isDismissible:
true
,
isScrollControlled:
true
,
showDragHandle:
true
,
backgroundColor:
Colors
.
white
,
enableDrag:
true
,
context:
context
,
builder:
(
context
)
{
return
StatefulBuilder
(
builder:
(
context
,
setState
)
{
return
SafeArea
(
child:
Consumer
<
crmProspectDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
left:
15
,
right:
15
,
top:
10
,
),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
),
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisSize:
MainAxisSize
.
min
,
children:
[
Align
(
alignment:
Alignment
.
topLeft
,
child:
Text
(
"Edit Contact"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
16
,
),
),
),
textControllerWidget
(
context
,
provider
.
editNameController
,
"Name"
,
"Enter Name"
,
provider
.
onChangeEditName
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
editNameError
),
textControllerWidget
(
context
,
provider
.
editDesignationController
,
"Designation"
,
"Enter Designation"
,
provider
.
onChangeEditDesignation
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
editDesignationError
),
textControllerWidget
(
context
,
provider
.
editMobileNumberController
,
"Mobile Number"
,
"Enter Mobile Number"
,
provider
.
onChangeEditMobile
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
editMobileNumError
),
textControllerWidget
(
context
,
provider
.
editAlternativeMobileController
,
"Alternative Mobile Number"
,
"Enter Alternative Mobile Number"
,
provider
.
onChangeEditAltMobile
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
editAltMobError
),
textControllerWidget
(
context
,
provider
.
editTelephoneController
,
"Telephone Number"
,
"Enter Telephone Number"
,
provider
.
onChangeEditTelephone
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
editTeleError
),
textControllerWidget
(
context
,
provider
.
editEmailController
,
"Email ID"
,
"Enter Email ID"
,
provider
.
onChangeEditEmailId
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
editEmailError
),
InkWell
(
onTap:
provider
.
isLoading
?
null
:
()
{
provider
.
isLoading
=
true
;
provider
.
crmProspectDetailsEditContactAPIFunction
(
context
,
provider
.
contactList
[
index
].
id
,
accid
,
);
},
child:
Container
(
alignment:
Alignment
.
center
,
height:
45
,
margin:
EdgeInsets
.
only
(
left:
5.0
,
right:
5.0
,
top:
5.0
,
bottom:
5.0
,
),
decoration:
BoxDecoration
(
color:
AppColors
.
app_blue
,
//1487C9
borderRadius:
BorderRadius
.
circular
(
14.0
),
),
child:
Center
(
child:
provider
.
isLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
,
),
)
:
Text
(
"Submit"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
),
),
),
),
),
),
);
}),
],
],
),
),
),
),
);
},
),
),
),
);
},
);
);
},
},
);
);
...
@@ -1095,4 +2881,380 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -1095,4 +2881,380 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
},
},
);
);
}
}
Future
<
void
>
_showAddLeadsSheet
(
BuildContext
context
,
mode
,
)
{
return
showModalBottomSheet
(
useSafeArea:
true
,
isDismissible:
true
,
isScrollControlled:
true
,
showDragHandle:
true
,
backgroundColor:
Colors
.
white
,
enableDrag:
true
,
context:
context
,
builder:
(
context
)
{
return
StatefulBuilder
(
builder:
(
context
,
setState
)
{
return
SafeArea
(
child:
Consumer2
<
crmProspectDetailsProvider
,
Addprospectleadsprovider
>(
builder:
(
context
,
provider
,
addleadProvider
,
child
)
{
final
price
=
double
.
tryParse
(
addleadProvider
.
addLeadProductPriceController
.
text
,
)
??
0
;
final
qty
=
int
.
tryParse
(
addleadProvider
.
addLeadProductQtyController
.
text
,
)
??
0
;
addleadProvider
.
addLeadProductTotalPriceController
.
text
=
(
price
*
qty
).
toString
();
void
updatedAmountfun
(
value
){
final
price
=
double
.
tryParse
(
addleadProvider
.
addLeadProductPriceController
.
text
,
)
??
0
;
final
qty
=
int
.
tryParse
(
addleadProvider
.
addLeadProductQtyController
.
text
,
)
??
0
;
addleadProvider
.
addLeadProductTotalPriceController
.
text
=
(
price
*
qty
).
toString
();
}
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
left:
15
,
right:
15
,
top:
10
,
),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
),
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
"Add Lead"
,
style:
TextStyle
(
fontSize:
14
,
color:
AppColors
.
app_blue
,
fontFamily:
"JakartaMedium"
,
),
),
SizedBox
(
height:
10
,),
TextWidget
(
context
,
"Employee"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
LeadEmployees
>(
hint:
Text
(
"Select Source"
,
style:
TextStyle
(
fontSize:
14
),
),
items:
addleadProvider
.
employeeList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
LeadEmployees
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
),
),
),
)
.
toList
(),
value:
addleadProvider
.
employeeList
.
contains
(
addleadProvider
.
selectedEmployee
,
)
?
addleadProvider
.
selectedEmployee
:
null
,
// value: provider.selectedEmployees,
onChanged:
(
LeadEmployees
?
value
)
{
if
(
value
!=
null
)
{
if
(
addleadProvider
.
employeeList
.
isNotEmpty
)
{
addleadProvider
.
selectedEmployee
=
value
;
addleadProvider
.
selectedEmployeeId
=
value
!.
id
!;
addleadProvider
.
selectedEmployeeValue
=
value
!.
name
!;
}
}
},
isExpanded:
true
,
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
addleadProvider
.
searchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
),
child:
TextFormField
(
controller:
addleadProvider
.
searchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search account...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
)
{
return
item
.
value
?.
name
?.
toLowerCase
().
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
addleadProvider
.
searchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
],
),
),
TextWidget
(
context
,
"Product"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
Products
>(
isExpanded:
true
,
hint:
const
Text
(
'Select Product'
,
style:
TextStyle
(
fontSize:
14
),
overflow:
TextOverflow
.
ellipsis
,
),
items:
addleadProvider
.
leadProductsList
.
map
(
(
ord
)
=>
DropdownMenuItem
<
Products
>(
value:
ord
,
child:
Text
(
"(Product Name:
${ord.name}
)"
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
value:
addleadProvider
.
selectedProductIds
!=
null
?
addleadProvider
.
leadProductsList
.
firstWhere
(
(
ord
)
=>
ord
.
id
==
addleadProvider
.
selectedProductIds
,
orElse:
()
=>
addleadProvider
.
leadProductsList
[
0
],
)
:
null
,
onChanged:
(
Products
?
value
)
{
// if (value != null) {
// addleadProvider
// .updateSelectedProductIds(
// j,
// value,
// );
// addleadProvider.selectedProductIds[j] =
// value.id?.toString() ?? '';
// addleadProvider.updateTotalAmount(j);
// }
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
],
),
),
const
SizedBox
(
height:
10
),
textControllerWidget
(
context
,
addleadProvider
.
addLeadProductPriceController
,
"Product Price"
,
"Enter Product Price"
,
(
value
)
=>
updatedAmountfun
(
value
),
TextInputType
.
number
,
false
,
null
,
),
const
SizedBox
(
height:
10
),
textControllerWidget
(
context
,
addleadProvider
.
addLeadProductQtyController
,
"Quantity"
,
"Enter Quantity"
,
(
value
)
=>
updatedAmountfun
(
value
),
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
"Note: Submit Quantity as Zero (0) to delete Product"
,
),
const
SizedBox
(
height:
10
),
Row
(
children:
[
Expanded
(
flex:
2
,
child:
textControllerWidget
(
context
,
addleadProvider
.
addLeadProductTotalPriceController
,
"Amount"
,
"Total Amount"
,
(
p0
)
{
},
TextInputType
.
number
,
true
,
FilteringTextInputFormatter
.
digitsOnly
,
),
),
],
),
TextWidget
(
context
,
"Status"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
String
>(
hint:
Text
(
"Select Status"
,
style:
TextStyle
(
fontSize:
14
),
),
items:
addleadProvider
.
statusList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
String
>(
value:
slist
,
child:
Text
(
slist
,
style:
TextStyle
(
fontSize:
14
),
),
),
)
.
toList
(),
value:
addleadProvider
.
selectedStatus
,
onChanged:
(
String
?
value
)
{
if
(
value
!=
null
)
{
if
(
addleadProvider
.
statusList
.
isNotEmpty
)
{
addleadProvider
.
selectedStatus
=
value
;
}
}
},
isExpanded:
true
,
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
],
),
),
InkResponse
(
onTap:
addleadProvider
.
submitLoading
?
null
:
()
{
addleadProvider
.
crmProspectDetailsAddLeadsSubmitAPIFunction
(
context
,
widget
.
mode
,
provider
.
accountDetails
.
id
,
addleadProvider
.
selectedEmployeeId
,
{},
addleadProvider
.
selectedStatus
,
);
},
child:
Container
(
height:
45
,
alignment:
Alignment
.
center
,
margin:
const
EdgeInsets
.
symmetric
(
horizontal:
0
,
vertical:
15
,
),
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
decoration:
BoxDecoration
(
color:
AppColors
.
app_blue
,
borderRadius:
BorderRadius
.
circular
(
15
),
),
child:
addleadProvider
.
submitLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
<
Color
>(
AppColors
.
white
,
),
)
:
const
Text
(
"Submit"
,
style:
TextStyle
(
fontSize:
15
,
fontFamily:
"JakartaMedium"
,
color:
Colors
.
white
,
),
),
),
),
],
),
),
);
},
),
);
},
);
},
).
whenComplete
(()
{
Provider
.
of
<
crmProspectDetailsProvider
>(
context
).
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
);
Provider
.
of
<
Addprospectleadsprovider
>(
context
).
resetForm
();
},);
}
}
}
lib/screens/crm/ProspectListByMode.dart
View file @
e079c6e8
...
@@ -89,7 +89,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -89,7 +89,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
// ignore: deprecated_member_use
// ignore: deprecated_member_use
return
Scaffold
(
return
Scaffold
(
resizeToAvoidBottomInset:
true
,
resizeToAvoidBottomInset:
true
,
appBar:
appbar2
(
appBar:
appbar2
New
(
context
,
context
,
widget
.
pageTitleName
,
widget
.
pageTitleName
,
provider
.
resetForm
,
provider
.
resetForm
,
...
@@ -106,6 +106,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -106,6 +106,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
),
),
],
],
),
),
0xFFFFFFFF
),
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
body:
...
...
lib/screens/crm/addProspectLeads.dart
View file @
e079c6e8
...
@@ -106,7 +106,7 @@ class _AddProspectLeadsState extends State<AddProspectLeads> {
...
@@ -106,7 +106,7 @@ class _AddProspectLeadsState extends State<AddProspectLeads> {
child:
Row
(
child:
Row
(
children:
[
children:
[
Expanded
(
Expanded
(
child:
DropdownButton2
<
Employees
>(
child:
DropdownButton2
<
Lead
Employees
>(
hint:
Text
(
hint:
Text
(
"Select Source"
,
"Select Source"
,
style:
TextStyle
(
fontSize:
14
),
style:
TextStyle
(
fontSize:
14
),
...
@@ -114,7 +114,7 @@ class _AddProspectLeadsState extends State<AddProspectLeads> {
...
@@ -114,7 +114,7 @@ class _AddProspectLeadsState extends State<AddProspectLeads> {
items:
items:
editProvider
.
employeeList
editProvider
.
employeeList
.
map
(
.
map
(
(
slist
)
=>
DropdownMenuItem
<
Employees
>(
(
slist
)
=>
DropdownMenuItem
<
Lead
Employees
>(
value:
slist
,
value:
slist
,
child:
Text
(
child:
Text
(
slist
.
name
!,
slist
.
name
!,
...
@@ -131,7 +131,7 @@ class _AddProspectLeadsState extends State<AddProspectLeads> {
...
@@ -131,7 +131,7 @@ class _AddProspectLeadsState extends State<AddProspectLeads> {
:
null
,
:
null
,
// value: provider.selectedEmployees,
// value: provider.selectedEmployees,
onChanged:
(
Employees
?
value
)
{
onChanged:
(
Lead
Employees
?
value
)
{
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
if
(
editProvider
.
employeeList
.
isNotEmpty
)
{
if
(
editProvider
.
employeeList
.
isNotEmpty
)
{
editProvider
.
selectedEmployee
=
value
;
editProvider
.
selectedEmployee
=
value
;
...
...
lib/screens/crm/appointmentCalendar.dart
0 → 100644
View file @
e079c6e8
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:dotted_line/dotted_line.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_svg/flutter_svg.dart'
;
import
'package:generp/Notifiers/crmProvider/appointmentCalendarProvider.dart'
;
import
'package:generp/Utils/app_colors.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/Utils/commonWidgets.dart'
;
import
'package:generp/Utils/dropdownTheme.dart'
;
import
'package:generp/screens/crm/LeadDetailsByMode.dart'
;
import
'package:intl/intl.dart'
;
import
'package:provider/provider.dart'
;
import
'package:url_launcher/url_launcher.dart'
;
class
Appointmentcalendar
extends
StatefulWidget
{
const
Appointmentcalendar
({
super
.
key
});
@override
State
<
Appointmentcalendar
>
createState
()
=>
_AppointmentcalendarState
();
}
class
_AppointmentcalendarState
extends
State
<
Appointmentcalendar
>
{
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
Dropdowntheme
ddtheme
=
Dropdowntheme
();
int
year
=
DateTime
.
now
().
year
;
int
month
=
DateTime
.
now
().
month
;
ScrollController
scrollController
=
ScrollController
();
GlobalKey
currentKey
=
GlobalKey
();
@override
void
initState
()
{
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
final
provider
=
Provider
.
of
<
Appointmentcalendarprovider
>(
context
,
listen:
false
,
);
DateTime
now
=
DateTime
.
now
();
final
currentDate
=
DateTime
(
now
.
year
,
now
.
month
,
now
.
day
);
String
formattedDate
=
DateFormat
(
'yyyy-MM-dd'
).
format
(
currentDate
);
provider
.
setSelectedDate
(
currentDate
);
// Initialize selected date
provider
.
crmAppointmentCalendarAPIFunction
(
context
,
formattedDate
,
"All"
);
_scrollToSelectedDate
(
currentDate
);
});
}
void
_scrollToSelectedDate
(
DateTime
selectedDate
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
{
if
(
currentKey
.
currentContext
!=
null
)
{
Scrollable
.
ensureVisible
(
currentKey
.
currentContext
!,
duration:
const
Duration
(
milliseconds:
300
),
curve:
Curves
.
easeInOut
,
alignment:
0.5
,
// Center the selected date in the viewport
);
}
else
{
final
daysInMonth
=
DateTime
(
year
,
month
+
1
,
0
).
day
;
final
selectedDay
=
selectedDate
.
day
;
const
itemWidth
=
70.0
;
// Approximate width of each day item (adjust as needed)
final
targetOffset
=
(
selectedDay
-
1
)
*
itemWidth
;
scrollController
.
jumpTo
(
targetOffset
.
clamp
(
0.0
,
scrollController
.
position
.
maxScrollExtent
),
);
}
});
}
@override
void
dispose
()
{
_connectivity
.
disposeStream
();
super
.
dispose
();
}
@override
Widget
build
(
BuildContext
context
)
{
String
connection
;
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
Appointmentcalendarprovider
>(
builder:
(
context
,
provider
,
child
)
{
return
Scaffold
(
resizeToAvoidBottomInset:
true
,
appBar:
appbarNew
(
context
,
"Appointment Calendar"
,
0xffffffff
),
backgroundColor:
AppColors
.
white
,
body:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
const
Divider
(
height:
2
,
color:
Color
(
0xFFD2D2D2
),
thickness:
0.5
,
),
Container
(
padding:
const
EdgeInsets
.
symmetric
(
vertical:
5
,
horizontal:
10
,
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
TextWidget
(
context
,
"Follow up Type"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
String
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Followup Type'
,
style:
TextStyle
(
fontSize:
14
),
overflow:
TextOverflow
.
ellipsis
,
),
),
],
),
items:
<
String
>[
'All'
,
'Phone'
,
'Visit'
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
value:
provider
.
selectedFollowUpType
,
onChanged:
(
String
?
newValue
)
{
if
(
newValue
!=
null
)
{
provider
.
selectedFollowUpType
=
newValue
;
if
(
provider
.
selectedDate
!=
null
)
{
final
formattedDate
=
DateFormat
(
'yyyy-MM-dd'
,
).
format
(
provider
.
selectedDate
!);
provider
.
crmAppointmentCalendarAPIFunction
(
context
,
formattedDate
,
newValue
,
);
}
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
],
),
),
],
),
),
const
SizedBox
(
height:
10
),
const
Divider
(
height:
2
,
color:
Color
(
0xFFD2D2D2
),
thickness:
0.5
,
),
const
SizedBox
(
height:
16
),
buildCalendar
(
context
,
provider
),
const
SizedBox
(
height:
16
),
if
(
provider
.
appointmentList
.
isNotEmpty
)
...[
Expanded
(
child:
Container
(
width:
double
.
infinity
,
decoration:
BoxDecoration
(
color:
AppColors
.
scaffold_bg_color
,
),
child:
ListView
.
builder
(
physics:
AlwaysScrollableScrollPhysics
(),
shrinkWrap:
true
,
padding:
EdgeInsets
.
symmetric
(
vertical:
5
,
horizontal:
0
,
),
itemCount:
provider
.
appointmentList
.
length
,
itemBuilder:
(
context
,
index
)
{
return
InkResponse
(
onTap:
()
async
{
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
LeadDetailsByMode
(
mode:
""
,
pageTitleName:
"Lead Details"
,
leadId:
provider
.
appointmentList
[
index
]
.
leadId
,
),
settings:
RouteSettings
(
name:
'LeadDetailsByMode'
,
),
),
);
},
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
children:
[
Row
(
children:
[
Expanded
(
flex:
1
,
child:
Container
(
height:
50
,
width:
35
,
child:
SvgPicture
.
asset
(
"assets/svg/crm/lead_details_list_ic.svg"
,
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
6
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
provider
.
appointmentList
[
index
]
.
name
??
"-"
,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
Text
(
provider
.
appointmentList
[
index
]
.
product
??
"-"
,
maxLines:
1
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
12
,
color:
AppColors
.
grey_semi
,
),
),
],
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
1
,
child:
InkResponse
(
onTap:
()
{
launch
(
'tel://
${provider.appointmentList[index].mob1}
'
,
);
},
child:
SizedBox
(
height:
35
,
width:
35
,
child:
SvgPicture
.
asset
(
"assets/svg/crm/lead_list_call_ic.svg"
,
),
),
),
),
],
),
],
),
),
);
},
),
),
),
]
else
...[
Expanded
(
child:
Container
(
decoration:
BoxDecoration
(
color:
AppColors
.
scaffold_bg_color
,
),
child:
Center
(
child:
Text
(
"No Data Available"
),
),
),
),
],
],
),
),
);
},
);
}
Widget
buildCalendar
(
BuildContext
context
,
Appointmentcalendarprovider
provider
,
)
{
final
daysInMonth
=
DateTime
(
year
,
month
+
1
,
0
).
day
;
const
weekdays
=
[
'Mon'
,
'Tue'
,
'Wed'
,
'Thu'
,
'Fri'
,
'Sat'
,
'Sun'
];
return
Column
(
children:
[
Container
(
child:
Row
(
children:
[
Expanded
(
flex:
1
,
child:
SizedBox
(
child:
Row
(
children:
[
Expanded
(
flex:
1
,
child:
GestureDetector
(
onTap:
()
{
setState
(()
{
if
(
month
==
1
)
{
month
=
12
;
year
--;
}
else
{
month
--;
}
// Fetch data for the first day of the new month or selected date
final
newDate
=
provider
.
selectedDate
!=
null
&&
provider
.
selectedDate
!.
month
==
month
&&
provider
.
selectedDate
!.
year
==
year
?
provider
.
selectedDate
!
:
DateTime
(
year
,
month
,
1
);
final
formattedDate
=
DateFormat
(
'yyyy-MM-dd'
,
).
format
(
newDate
);
provider
.
setSelectedDate
(
newDate
);
provider
.
crmAppointmentCalendarAPIFunction
(
context
,
formattedDate
,
provider
.
selectedFollowUpType
??
''
,
);
});
},
child:
SvgPicture
.
asset
(
"assets/svg/crm/calendar_left.svg"
,
),
),
),
Expanded
(
flex:
2
,
child:
Text
(
textAlign:
TextAlign
.
center
,
'
${_monthName(month)}
$year
'
,
style:
TextStyle
(
fontSize:
14
),
),
),
Expanded
(
flex:
1
,
child:
GestureDetector
(
onTap:
()
{
setState
(()
{
if
(
month
==
12
)
{
month
=
1
;
year
++;
}
else
{
month
++;
}
// Fetch data for the first day of the new month or selected date
final
newDate
=
provider
.
selectedDate
!=
null
&&
provider
.
selectedDate
!.
month
==
month
&&
provider
.
selectedDate
!.
year
==
year
?
provider
.
selectedDate
!
:
DateTime
(
year
,
month
,
1
);
final
formattedDate
=
DateFormat
(
'yyyy-MM-dd'
,
).
format
(
newDate
);
provider
.
setSelectedDate
(
newDate
);
provider
.
crmAppointmentCalendarAPIFunction
(
context
,
formattedDate
,
provider
.
selectedFollowUpType
??
''
,
);
});
},
child:
SvgPicture
.
asset
(
"assets/svg/crm/calendar_right.svg"
,
),
),
),
],
),
),
),
Spacer
(),
],
),
),
const
SizedBox
(
height:
8
),
Container
(
height:
70
,
// Increased height to accommodate weekday text
child:
ListView
.
builder
(
controller:
scrollController
,
scrollDirection:
Axis
.
horizontal
,
itemCount:
daysInMonth
,
itemBuilder:
(
BuildContext
context
,
int
index
)
{
final
day
=
index
+
1
;
final
date
=
DateTime
(
year
,
month
,
day
);
final
weekday
=
weekdays
[
date
.
weekday
-
1
];
final
isToday
=
date
.
year
==
DateTime
.
now
().
year
&&
date
.
month
==
DateTime
.
now
().
month
&&
date
.
day
==
DateTime
.
now
().
day
;
final
isSelected
=
provider
.
selectedDate
==
date
;
return
InkResponse
(
onTap:
()
{
final
formattedDate
=
DateFormat
(
'yyyy-MM-dd'
).
format
(
date
);
print
(
formattedDate
);
provider
.
setSelectedDate
(
date
);
provider
.
crmAppointmentCalendarAPIFunction
(
context
,
formattedDate
,
provider
.
selectedFollowUpType
??
''
,
);
_scrollToSelectedDate
(
date
);
},
child:
Container
(
key:
isSelected
?
currentKey
:
null
,
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
12
),
decoration:
BoxDecoration
(
color:
isSelected
?
AppColors
.
app_blue
:
Colors
.
white
,
),
child:
Column
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Text
(
day
.
toString
(),
style:
TextStyle
(
fontSize:
18
,
fontFamily:
"JakartaSemiBold"
,
color:
isSelected
?
Colors
.
white
:
AppColors
.
semi_black
,
),
),
const
SizedBox
(
height:
4
),
Text
(
weekday
,
style:
TextStyle
(
fontSize:
12
,
fontFamily:
"JakartaMedium"
,
color:
isSelected
?
Colors
.
white
:
AppColors
.
grey_semi
,
),
),
],
),
),
);
},
),
),
],
);
}
String
_monthName
(
int
month
)
{
const
months
=
[
'Jan'
,
'Feb'
,
'Mar'
,
'Apr'
,
'May'
,
'June'
,
'July'
,
'Aug'
,
'Sept'
,
'Oct'
,
'Nov'
,
'Dec'
,
];
return
months
[
month
-
1
];
}
}
lib/screens/crm/crmDashboard.dart
View file @
e079c6e8
...
@@ -5,6 +5,7 @@ import 'package:dotted_line/dotted_line.dart';
...
@@ -5,6 +5,7 @@ import 'package:dotted_line/dotted_line.dart';
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/screens/crm/appointmentCalendar.dart'
;
import
'package:generp/screens/crm/pendingTasksDetails.dart'
;
import
'package:generp/screens/crm/pendingTasksDetails.dart'
;
import
'package:generp/screens/crm/pendingTasksList.dart'
;
import
'package:generp/screens/crm/pendingTasksList.dart'
;
import
'package:generp/screens/crm/universalSearchScreen.dart'
;
import
'package:generp/screens/crm/universalSearchScreen.dart'
;
...
@@ -322,8 +323,8 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
...
@@ -322,8 +323,8 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
},
},
),
),
),
),
]
else
...[
]
else
...[
SizedBox
(
height:
10
,
),
SizedBox
(
height:
10
),
],
],
// ListView.builder(
// ListView.builder(
...
@@ -437,7 +438,6 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
...
@@ -437,7 +438,6 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
// );
// );
// },
// },
// ),
// ),
Container
(
Container
(
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.2
,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.2
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
...
@@ -583,7 +583,18 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
...
@@ -583,7 +583,18 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
SizedBox
(
width:
10
),
SizedBox
(
width:
10
),
Expanded
(
Expanded
(
child:
InkResponse
(
child:
InkResponse
(
onTap:
()
{},
onTap:
()
async
{
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Appointmentcalendar
(),
settings:
RouteSettings
(
name:
'Appointmentcalendar'
)
),
);
},
child:
Container
(
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
padding:
EdgeInsets
.
symmetric
(
...
@@ -715,9 +726,10 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
...
@@ -715,9 +726,10 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
await
Navigator
.
push
(
await
Navigator
.
push
(
context
,
context
,
MaterialPageRoute
(
MaterialPageRoute
(
builder:
(
context
)
=>
NearbyOpenLeads
(
builder:
latitude:
latitude
,
(
context
)
=>
NearbyOpenLeads
(
longitude:
longitude
latitude:
latitude
,
longitude:
longitude
,
),
),
settings:
RouteSettings
(
settings:
RouteSettings
(
name:
"NearbyOpenLeads"
,
name:
"NearbyOpenLeads"
,
...
@@ -746,7 +758,8 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
...
@@ -746,7 +758,8 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
children:
[
children:
[
Expanded
(
Expanded
(
child:
Column
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
children:
[
Text
(
Text
(
provider
.
nearByLeads
[
index
].
name
??
"-"
,
provider
.
nearByLeads
[
index
].
name
??
"-"
,
...
@@ -754,7 +767,7 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
...
@@ -754,7 +767,7 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
style:
TextStyle
(
style:
TextStyle
(
fontSize:
14
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaMedium"
fontFamily:
"JakartaMedium"
,
),
),
),
),
Text
(
Text
(
...
@@ -764,24 +777,35 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
...
@@ -764,24 +777,35 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
style:
TextStyle
(
style:
TextStyle
(
fontSize:
14
,
fontSize:
14
,
color:
AppColors
.
grey_semi
,
color:
AppColors
.
grey_semi
,
fontFamily:
"JakartaMedium"
fontFamily:
"JakartaMedium"
,
),
),
),
),
],
],
),
),
),
),
SizedBox
(
width:
10
,
),
SizedBox
(
width:
10
),
Expanded
(
Expanded
(
child:
Container
(
decoration:
BoxDecoration
(
border:
Border
.
all
(
color:
AppColors
.
semi_black
.
withAlpha
(
10
)
),
borderRadius:
BorderRadius
.
circular
(
16
)
),
child:
ClipRRect
(
child:
ClipRRect
(
borderRadius:
BorderRadius
.
circular
(
16
),
borderRadius:
BorderRadius
.
circular
(
16
),
child:
Image
.
network
(
child:
Image
.
network
(
provider
.
getSimpleOSMImage
(
latitude
,
longitude
),
provider
.
getSimpleOSMImage
(
latitude
,
longitude
,
),
width:
400
,
width:
400
,
height:
400
,
height:
400
,
fit:
BoxFit
.
cover
,
fit:
BoxFit
.
cover
,
),
),
),
),
),
),
),
],
],
),
),
),
),
...
@@ -789,8 +813,8 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
...
@@ -789,8 +813,8 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
},
},
),
),
),
),
]
else
...[
]
else
...[
SizedBox
(
height:
10
,
),
SizedBox
(
height:
10
),
InkResponse
(
InkResponse
(
onTap:
()
{
onTap:
()
{
Navigator
.
push
(
Navigator
.
push
(
...
...
lib/screens/notifierExports.dart
View file @
e079c6e8
...
@@ -54,3 +54,4 @@ export 'package:generp/Notifiers/crmProvider/crmGenerateQuotationProvider.dart';
...
@@ -54,3 +54,4 @@ export 'package:generp/Notifiers/crmProvider/crmGenerateQuotationProvider.dart';
export
'package:generp/Notifiers/crmProvider/crmEditProspectAccountProvider.dart'
;
export
'package:generp/Notifiers/crmProvider/crmEditProspectAccountProvider.dart'
;
export
'package:generp/Notifiers/crmProvider/addProspectLeadsProvider.dart'
;
export
'package:generp/Notifiers/crmProvider/addProspectLeadsProvider.dart'
;
export
'package:generp/Notifiers/crmProvider/followUpUpdateProvider.dart'
;
export
'package:generp/Notifiers/crmProvider/followUpUpdateProvider.dart'
;
export
'package:generp/Notifiers/crmProvider/appointmentCalendarProvider.dart'
;
lib/screens/old/prospectDetailsOld.dart
0 → 100644
View file @
e079c6e8
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Notifiers/crmProvider/crmEditProspectAccountProvider.dart'
;
import
'package:generp/Notifiers/crmProvider/crmLeadDetailsProvider.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/Utils/dropdownTheme.dart'
;
import
'package:generp/screens/crm/prospectContactDetails.dart'
;
import
'package:generp/screens/crm/prospectLeadDetails.dart'
;
import
'package:generp/screens/crm/prospectOrderDetails.dart'
;
import
'package:generp/screens/crm/prospectPaymentDetails.dart'
;
import
'package:get/get.dart'
;
import
'package:provider/provider.dart'
;
import
'../../Models/crmModels/GetDistrictOnStateResponse.dart'
;
import
'../../Models/crmModels/GetSubLocOnDistrictResponse.dart'
;
import
'../../Models/crmModels/LeadListViewResponse.dart'
show
Employees
;
import
'../../Models/crmModels/crmProspectDetailsEditAccountViewResponse.dart'
;
import
'../../Notifiers/crmProvider/crmProspectDetailsProvider.dart'
;
import
'../../Utils/app_colors.dart'
;
import
'../../Utils/commonWidgets.dart'
;
class
ProspectDetailsByModeOld
extends
StatefulWidget
{
final
mode
;
final
pageTitleName
;
final
leadId
;
const
ProspectDetailsByModeOld
({
super
.
key
,
this
.
mode
,
this
.
pageTitleName
,
this
.
leadId
,
});
@override
State
<
ProspectDetailsByModeOld
>
createState
()
=>
ProspectDetailsByModeOldState
();
}
class
ProspectDetailsByModeOldState
extends
State
<
ProspectDetailsByModeOld
>
{
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
void
initState
()
{
// TODO: implement initState
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
final
provider
=
Provider
.
of
<
crmProspectDetailsProvider
>(
context
,
listen:
false
,
);
final
editProvider
=
Provider
.
of
<
Crmeditprospectaccountprovider
>(
context
,
listen:
false
,
);
editProvider
.
crmLeadListViewAPIFunction
(
context
,
widget
.
mode
);
editProvider
.
crmProspectDetailsEditAccountViewAPIFunction
(
context
,
widget
.
leadId
,
);
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
);
});
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
void
prefill
()
async
{
final
editProvider
=
Provider
.
of
<
Crmeditprospectaccountprovider
>(
context
,
listen:
false
,
);
await
editProvider
.
crmProspectDetailsEditAccountViewAPIFunction
(
context
,
widget
.
leadId
,
);
editProvider
.
editCompanyNameController
.
text
=
editProvider
.
accountDetails
.
name
??
""
;
editProvider
.
addressController
.
text
=
editProvider
.
accountDetails
.
address
??
""
;
editProvider
.
pincodeController
.
text
=
editProvider
.
accountDetails
.
pincode
??
""
;
if
(
editProvider
.
salutationList
.
isNotEmpty
&&
editProvider
.
accountDetails
.
salutationName
!=
null
)
{
editProvider
.
selectedSalutation
=
editProvider
.
salutationList
.
firstWhere
(
(
element
)
=>
element
==
editProvider
.
accountDetails
.
salutationName
,
)
??
editProvider
.
salutationList
.
first
;
}
// print("States:${editProvider.statesList.toList()}");
if
(
editProvider
.
statesList
.
isNotEmpty
&&
editProvider
.
accountDetails
.
state
!=
null
)
{
print
(
editProvider
.
accountDetails
.
state
);
final
selectedState
=
editProvider
.
statesList
.
firstWhere
(
(
element
)
=>
element
.
id
!.
trim
()
==
editProvider
.
accountDetails
.
state
!.
trim
(),
);
if
(
selectedState
!=
null
)
{
editProvider
.
selectedStates
=
selectedState
;
editProvider
.
selectedStateId
=
selectedState
.
id
;
editProvider
.
selectedStateValue
=
selectedState
.
name
;
await
editProvider
.
crmLeadListDistrictsOnStateAPIFunction
(
context
,
widget
.
mode
,
editProvider
.
selectedStateId
,
);
}
}
// Prefill district
if
(
editProvider
.
districtsList
.
isNotEmpty
&&
editProvider
.
accountDetails
.
district
!=
null
)
{
final
selectedDistrict
=
editProvider
.
districtsList
.
firstWhere
(
(
element
)
=>
element
.
id
!.
trim
()
==
editProvider
.
accountDetails
.
district
!.
trim
(),
);
if
(
selectedDistrict
!=
null
)
{
editProvider
.
selectedDistricts
=
selectedDistrict
;
editProvider
.
selectedDistrictId
=
selectedDistrict
.
id
;
editProvider
.
selectedDistrictValue
=
selectedDistrict
.
district
;
await
editProvider
.
crmLeadListSubLocOnDistrictAPIFunction
(
context
,
widget
.
mode
,
editProvider
.
selectedDistrictId
,
);
}
}
if
(
editProvider
.
subLocationsList
.
isNotEmpty
&&
editProvider
.
accountDetails
.
subLocality
!=
null
)
{
final
selectedSubLocation
=
editProvider
.
subLocationsList
.
firstWhere
(
(
element
)
=>
element
.
id
==
editProvider
.
accountDetails
.
subLocality
,
);
if
(
selectedSubLocation
!=
null
)
{
editProvider
.
selectedSubLocations
=
selectedSubLocation
;
editProvider
.
selectedSubLocationId
=
selectedSubLocation
.
id
;
editProvider
.
selectedSubLocationValue
=
selectedSubLocation
.
subLocality
;
}
}
print
(
"Company Name:
${editProvider.editCompanyNameController.text}
"
);
print
(
"Pincode:
${editProvider.pincodeController.text}
"
);
print
(
"Address:
${editProvider.addressController.text}
"
);
print
(
"Selected Salutation:
${editProvider.selectedSalutation}
"
);
print
(
"Selected State ID:
${editProvider.selectedStateId}
"
);
print
(
"Selected State Value:
${editProvider.selectedStateValue}
"
);
print
(
"Selected District ID:
${editProvider.selectedDistrictId}
"
);
print
(
"Selected District Value:
${editProvider.selectedDistrictValue}
"
);
print
(
"Selected Sub-Location ID:
${editProvider.selectedSubLocationId}
"
);
print
(
"Selected Sub-Location Value:
${editProvider.selectedSubLocationValue}
"
,
);
}
@override
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer2
<
crmProspectDetailsProvider
,
Crmeditprospectaccountprovider
>(
builder:
(
context
,
provider
,
editProvider
,
child
)
{
var
leadDetails
=
provider
.
accountDetails
;
return
Scaffold
(
resizeToAvoidBottomInset:
true
,
appBar:
appbar2
(
context
,
widget
.
pageTitleName
,
provider
.
resetAll
,
InkResponse
(
onTap:
()
{
_showOptionsSheet
(
context
);
},
child:
SvgPicture
.
asset
(
"assets/svg/ic_more.svg"
,
height:
30
),
),
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
Container
(
child:
SingleChildScrollView
(
child:
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
child:
Column
(
children:
[
Row
(
children:
[
Expanded
(
flex:
1
,
child:
Container
(
height:
50
,
width:
35
,
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
8
),
),
child:
SvgPicture
.
asset
(
"assets/svg/se_block_head.svg"
,
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
"
${leadDetails.salutationName ?? "-"}
${leadDetails.name ?? "-"}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
],
),
),
),
if
(
provider
.
showTransferAccount
==
"1"
)
...[
SizedBox
(
width:
5
),
Expanded
(
flex:
1
,
child:
InkResponse
(
onTap:
()
async
{
_showTransferAccountSheet
(
context
,
provider
.
accountDetails
.
id
!,
);
},
child:
Container
(
height:
32
,
width:
30
,
padding:
EdgeInsets
.
all
(
8.0
),
child:
SvgPicture
.
asset
(
"assets/svg/transfer_ac.svg"
,
),
),
),
),
],
SizedBox
(
width:
5
),
Expanded
(
flex:
1
,
child:
InkResponse
(
onTap:
()
async
{
editProvider
.
checkDropDownValues
();
prefill
();
await
_showEditAccountSheet
(
context
,
provider
.
accountDetails
.
id
!,
);
},
child:
Container
(
height:
32
,
width:
30
,
padding:
EdgeInsets
.
all
(
8.0
),
child:
SvgPicture
.
asset
(
"assets/svg/crm_contact_edit.svg"
,
),
),
),
),
],
),
Divider
(
thickness:
0.5
,
color:
Color
(
0xFFD7D7D7
)),
...
List
.
generate
(
provider
.
subHeadings
.
length
,
(
j
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
provider
.
Headings
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
child:
InkResponse
(
child:
provider
.
Headings
[
j
]
==
"Lead Age"
?
Tooltip
(
triggerMode:
TooltipTriggerMode
.
tap
,
message:
"
${provider.accountDetails.createdDatetime}
"
,
child:
Text
(
provider
.
subHeadings
[
j
]
==
""
?
"-"
:
provider
.
subHeadings
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
decorationColor:
AppColors
.
grey_semi
,
decoration:
TextDecoration
.
underline
,
),
),
)
:
Text
(
provider
.
subHeadings
[
j
]
==
""
?
"-"
:
provider
.
subHeadings
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
),
],
),
);
}),
],
),
),
),
),
);
},
);
}
Future
<
void
>
_showTransferAccountSheet
(
BuildContext
context
,
accID
)
{
return
showModalBottomSheet
(
useSafeArea:
true
,
isDismissible:
true
,
isScrollControlled:
true
,
showDragHandle:
true
,
backgroundColor:
Colors
.
white
,
enableDrag:
true
,
context:
context
,
builder:
(
context
)
{
return
StatefulBuilder
(
builder:
(
context
,
setState
)
{
return
SafeArea
(
child:
Consumer
<
Crmeditprospectaccountprovider
>(
builder:
(
context
,
editProsProvider
,
child
)
{
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
left:
15
,
right:
15
,
top:
10
,
),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
),
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisSize:
MainAxisSize
.
min
,
children:
[
Align
(
alignment:
Alignment
.
topLeft
,
child:
Text
(
"Transfer Account"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
16
,
),
),
),
TextWidget
(
context
,
"Employee"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
Employees
>(
hint:
Text
(
"Select Source"
,
style:
TextStyle
(
fontSize:
14
),
),
items:
editProsProvider
.
employeesList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
Employees
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
,
),
),
),
)
.
toList
(),
value:
editProsProvider
.
employeesList
.
contains
(
editProsProvider
.
selectedEmployees
,
)
?
editProsProvider
.
selectedEmployees
:
null
,
// value: provider.selectedEmployees,
onChanged:
(
Employees
?
value
)
{
if
(
value
!=
null
)
{
if
(
editProsProvider
.
employeesList
.
isNotEmpty
)
{
editProsProvider
.
selectedEmployees
=
value
;
editProsProvider
.
selectedEmployeeId
=
value
!.
id
!;
editProsProvider
.
selectedEmployeeValue
=
value
!.
name
!;
}
}
},
isExpanded:
true
,
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
editProsProvider
.
searchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
),
child:
TextFormField
(
controller:
editProsProvider
.
searchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search account...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
editProsProvider
.
searchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
],
),
),
InkWell
(
onTap:
editProsProvider
.
isLoading
?
null
:
()
{
editProsProvider
.
isLoading
=
true
;
editProsProvider
.
crmProspectDetailsTransferAccountAPIFunction
(
context
,
accID
,
editProsProvider
.
selectedEmployeeId
,
);
},
child:
Container
(
alignment:
Alignment
.
center
,
height:
45
,
margin:
EdgeInsets
.
only
(
left:
5.0
,
right:
5.0
,
top:
5.0
,
bottom:
5.0
,
),
decoration:
BoxDecoration
(
color:
AppColors
.
app_blue
,
//1487C9
borderRadius:
BorderRadius
.
circular
(
14.0
),
),
child:
Center
(
child:
editProsProvider
.
isLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
,
),
)
:
Text
(
"Submit"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
),
),
),
),
),
],
),
),
);
},
),
);
},
);
},
).
whenComplete
(()
{});
}
Future
<
void
>
_showEditAccountSheet
(
BuildContext
context
,
accID
)
{
return
showModalBottomSheet
(
useSafeArea:
true
,
isDismissible:
true
,
isScrollControlled:
true
,
showDragHandle:
true
,
backgroundColor:
Colors
.
white
,
enableDrag:
true
,
context:
context
,
builder:
(
context
)
{
return
StatefulBuilder
(
builder:
(
context
,
setState
)
{
return
SafeArea
(
child:
Consumer2
<
Crmeditprospectaccountprovider
,
crmProspectDetailsProvider
>(
builder:
(
context
,
provider
,
prosDetProvider
,
child
)
{
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
left:
15
,
right:
15
,
top:
10
,
),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
),
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisSize:
MainAxisSize
.
min
,
children:
[
SizedBox
(
height:
15
),
Row
(
children:
[
Expanded
(
child:
Text
(
"Edit Account Details"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
14
,
),
),
),
],
),
TextWidget
(
context
,
"Salutation"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
String
>(
hint:
Text
(
"Select Salutation"
,
style:
TextStyle
(
fontSize:
14
),
),
items:
provider
.
salutationList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
String
>(
value:
slist
,
child:
Text
(
slist
,
style:
TextStyle
(
fontSize:
14
,
),
),
),
)
.
toList
(),
value:
provider
.
selectedSalutation
,
onChanged:
(
String
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
salutationList
.
isNotEmpty
)
{
provider
.
selectedSalutation
=
value
;
}
}
},
isExpanded:
true
,
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
],
),
),
errorWidget
(
context
,
provider
.
salutationError
),
textControllerWidget
(
context
,
provider
.
editCompanyNameController
,
"Company Name"
,
"Enter Company Name"
,
provider
.
onChangeCompanyName
,
TextInputType
.
text
,
false
,
null
,
),
errorWidget
(
context
,
provider
.
companyNameError
),
TextWidget
(
context
,
"State"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
States
>(
hint:
Text
(
"Select State"
,
style:
TextStyle
(
fontSize:
14
),
),
items:
provider
.
statesList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
States
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
,
),
),
),
)
.
toList
(),
value:
provider
.
statesList
.
contains
(
provider
.
selectedStates
,
)
?
provider
.
selectedStates
:
null
,
onChanged:
(
States
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
statesList
.
isNotEmpty
)
{
provider
.
selectedStates
=
value
;
provider
.
selectedStateId
=
value
!.
id
!;
provider
.
selectedStateValue
=
value
!.
name
!;
if
(
provider
.
districtsList
.
isNotEmpty
)
{
provider
.
districtsList
.
clear
();
provider
.
selectedDistricts
=
null
;
provider
.
selectedDistrictId
=
null
;
provider
.
selectedDistrictValue
=
""
;
}
provider
.
crmLeadListDistrictsOnStateAPIFunction
(
context
,
widget
.
mode
,
provider
.
selectedStateId
,
);
}
}
},
isExpanded:
true
,
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
],
),
),
TextWidget
(
context
,
"District"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
Districts
>(
hint:
Text
(
"Select District"
,
style:
TextStyle
(
fontSize:
14
),
),
items:
provider
.
districtsList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
Districts
>(
value:
slist
,
child:
Text
(
slist
.
district
!,
style:
TextStyle
(
fontSize:
14
,
),
),
),
)
.
toList
(),
value:
provider
.
districtsList
.
contains
(
provider
.
selectedDistricts
,
)
?
provider
.
selectedDistricts
:
null
,
// value: provider.selectedDistricts,
onChanged:
(
Districts
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
districtsList
.
isNotEmpty
)
{
provider
.
selectedDistricts
=
value
;
provider
.
selectedDistrictId
=
value
!.
id
!;
provider
.
selectedDistrictValue
=
value
!.
district
!;
if
(
provider
.
subLocationsList
.
isNotEmpty
)
{
provider
.
subLocationsList
.
clear
();
provider
.
selectedSubLocations
=
null
;
provider
.
selectedSubLocationId
=
null
;
provider
.
selectedSubLocationValue
=
""
;
}
provider
.
crmLeadListSubLocOnDistrictAPIFunction
(
context
,
widget
.
mode
,
provider
.
selectedDistrictId
,
);
prosDetProvider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
,
);
}
}
},
isExpanded:
true
,
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
],
),
),
TextWidget
(
context
,
"Sub Location"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
SubLocations
>(
hint:
Text
(
"Select Sub Location"
,
style:
TextStyle
(
fontSize:
14
),
),
items:
provider
.
subLocationsList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
SubLocations
>(
value:
slist
,
child:
Text
(
slist
.
subLocality
!,
style:
TextStyle
(
fontSize:
14
,
),
),
),
)
.
toList
(),
value:
provider
.
subLocationsList
.
contains
(
provider
.
selectedSubLocations
,
)
?
provider
.
selectedSubLocations
:
null
,
// value: provider.selectedSubLocations,
onChanged:
(
SubLocations
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
subLocationsList
.
isNotEmpty
)
{
provider
.
selectedSubLocations
=
value
;
provider
.
selectedSubLocationId
=
value
!.
id
!;
provider
.
selectedSubLocationValue
=
value
!.
subLocality
!;
}
}
},
isExpanded:
true
,
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
],
),
),
textControllerWidget
(
context
,
provider
.
pincodeController
,
"Pincode"
,
"Enter Pincode"
,
provider
.
onChangePincode
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
errorWidget
(
context
,
provider
.
pincodeError
),
textControllerWidget
(
context
,
provider
.
addressController
,
"Address"
,
"Enter Address"
,
provider
.
onChangeAddress
,
TextInputType
.
text
,
false
,
null
,
),
errorWidget
(
context
,
provider
.
addressError
),
InkResponse
(
onTap:
provider
.
isLoading
?
null
:
()
{
provider
.
isLoading
=
true
;
provider
.
crmProspectDetailsEditAccountSubmitAPIFunction
(
context
,
accID
,
provider
.
selectedSalutation
,
provider
.
selectedStateId
,
provider
.
selectedDistrictId
,
provider
.
selectedSubLocationId
,
);
Navigator
.
pop
(
context
);
},
child:
Container
(
height:
45
,
alignment:
Alignment
.
center
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
decoration:
BoxDecoration
(
color:
AppColors
.
app_blue
,
borderRadius:
BorderRadius
.
circular
(
15
),
),
child:
provider
.
isLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
,
),
)
:
Text
(
"Submit"
,
style:
TextStyle
(
fontSize:
15
,
fontFamily:
"JakartaMedium"
,
color:
Colors
.
white
,
),
),
),
),
],
),
),
);
},
),
);
},
);
},
);
}
Future
<
void
>
_showOptionsSheet
(
BuildContext
context
)
{
return
showModalBottomSheet
(
useSafeArea:
true
,
isDismissible:
true
,
isScrollControlled:
true
,
showDragHandle:
true
,
backgroundColor:
Colors
.
white
,
enableDrag:
true
,
context:
context
,
builder:
(
context
)
{
return
StatefulBuilder
(
builder:
(
context
,
setState
)
{
return
SafeArea
(
child:
Consumer
<
crmLeadDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
left:
15
,
right:
15
,
top:
10
,
),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
),
child:
SingleChildScrollView
(
child:
Column
(
mainAxisSize:
MainAxisSize
.
min
,
children:
[
SizedBox
(
height:
15
),
...
List
.
generate
(
4
,
(
index
)
{
final
assetnames
=
[
"crm_appoint_details"
,
"crm_cont_details"
,
"crm_follow_up_details"
,
"crm_prod_details"
,
];
final
Headingnames
=
[
"Lead Details"
,
"Contact Details"
,
"Order Details"
,
"Payment Details"
,
];
return
ListTile
(
onTap:
()
{
switch
(
index
)
{
case
0
:
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
ProspectLeadDetails
(
leadID:
widget
.
leadId
,
mode:
widget
.
mode
,
),
),
);
break
;
case
1
:
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
ProspectContactDetails
(
accountId:
provider
.
accountDetails
.
id
,
),
),
);
break
;
case
2
:
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
ProspectOrderDetails
(
leadID:
widget
.
leadId
,
),
),
);
break
;
case
3
:
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
ProspectPaymentDetails
(
leadID:
widget
.
leadId
,
),
),
);
break
;
default
:
print
(
"object"
);
}
},
leading:
SvgPicture
.
asset
(
"assets/svg/
${assetnames[index]}
.svg"
,
),
title:
Text
(
Headingnames
[
index
],
style:
TextStyle
(
fontFamily:
"JakartaMedium"
),
),
trailing:
SvgPicture
.
asset
(
"assets/svg/arrow_right_new.svg"
,
),
);
}),
],
),
),
);
},
),
);
},
);
},
);
}
}
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment