feat: update contract handling to include customer contract number and improve status filtering
This commit is contained in:
@@ -10,6 +10,7 @@ async function getContractsHandler() {
|
|||||||
contract_id,
|
contract_id,
|
||||||
contract_number,
|
contract_number,
|
||||||
contract_name,
|
contract_name,
|
||||||
|
customer_contract_number,
|
||||||
customer,
|
customer,
|
||||||
investor,
|
investor,
|
||||||
date_signed,
|
date_signed,
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ export default function ContractsMainPage() {
|
|||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [searchTerm, setSearchTerm] = useState("");
|
const [searchTerm, setSearchTerm] = useState("");
|
||||||
const [filteredContracts, setFilteredContracts] = useState([]);
|
const [filteredContracts, setFilteredContracts] = useState([]);
|
||||||
const [sortBy, setSortBy] = useState("contract_number");
|
const [sortBy, setSortBy] = useState("date_signed");
|
||||||
const [sortOrder, setSortOrder] = useState("asc");
|
const [sortOrder, setSortOrder] = useState("desc");
|
||||||
const [statusFilter, setStatusFilter] = useState("all");
|
const [statusFilter, setStatusFilter] = useState("all");
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -53,6 +53,9 @@ export default function ContractsMainPage() {
|
|||||||
contract.contract_name
|
contract.contract_name
|
||||||
?.toLowerCase()
|
?.toLowerCase()
|
||||||
.includes(searchTerm.toLowerCase()) ||
|
.includes(searchTerm.toLowerCase()) ||
|
||||||
|
contract.customer_contract_number
|
||||||
|
?.toLowerCase()
|
||||||
|
.includes(searchTerm.toLowerCase()) ||
|
||||||
contract.customer?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
contract.customer?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||||
contract.investor?.toLowerCase().includes(searchTerm.toLowerCase())
|
contract.investor?.toLowerCase().includes(searchTerm.toLowerCase())
|
||||||
);
|
);
|
||||||
@@ -64,9 +67,9 @@ export default function ContractsMainPage() {
|
|||||||
filtered = filtered.filter((contract) => {
|
filtered = filtered.filter((contract) => {
|
||||||
if (statusFilter === "active" && contract.finish_date) {
|
if (statusFilter === "active" && contract.finish_date) {
|
||||||
return new Date(contract.finish_date) >= currentDate;
|
return new Date(contract.finish_date) >= currentDate;
|
||||||
} else if (statusFilter === "completed" && contract.finish_date) {
|
} else if (statusFilter === "expired" && contract.finish_date) {
|
||||||
return new Date(contract.finish_date) < currentDate;
|
return new Date(contract.finish_date) < currentDate;
|
||||||
} else if (statusFilter === "no_end_date") {
|
} else if (statusFilter === "ongoing") {
|
||||||
return !contract.finish_date;
|
return !contract.finish_date;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -117,27 +120,27 @@ export default function ContractsMainPage() {
|
|||||||
const active = contracts.filter(
|
const active = contracts.filter(
|
||||||
(c) => !c.finish_date || new Date(c.finish_date) >= currentDate
|
(c) => !c.finish_date || new Date(c.finish_date) >= currentDate
|
||||||
).length;
|
).length;
|
||||||
const completed = contracts.filter(
|
const expired = contracts.filter(
|
||||||
(c) => c.finish_date && new Date(c.finish_date) < currentDate
|
(c) => c.finish_date && new Date(c.finish_date) < currentDate
|
||||||
).length;
|
).length;
|
||||||
const withoutEndDate = contracts.filter((c) => !c.finish_date).length;
|
const withoutEndDate = contracts.filter((c) => !c.finish_date).length;
|
||||||
|
|
||||||
return { total, active, completed, withoutEndDate };
|
return { total, active, expired, withoutEndDate };
|
||||||
};
|
};
|
||||||
|
|
||||||
const getContractStatus = (contract) => {
|
const getContractStatus = (contract) => {
|
||||||
if (!contract.finish_date) return "ongoing";
|
if (!contract.finish_date) return "ongoing";
|
||||||
const currentDate = new Date();
|
const currentDate = new Date();
|
||||||
const finishDate = new Date(contract.finish_date);
|
const finishDate = new Date(contract.finish_date);
|
||||||
return finishDate >= currentDate ? "active" : "completed";
|
return finishDate >= currentDate ? "active" : "expired";
|
||||||
};
|
};
|
||||||
|
|
||||||
const getStatusBadge = (status) => {
|
const getStatusBadge = (status) => {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case "active":
|
case "active":
|
||||||
return <Badge variant="success">{t('contracts.active')}</Badge>;
|
return <Badge variant="success">{t('contracts.active')}</Badge>;
|
||||||
case "completed":
|
case "expired":
|
||||||
return <Badge variant="secondary">{t('common.completed')}</Badge>;
|
return <Badge variant="danger">{t('contracts.expired')}</Badge>;
|
||||||
case "ongoing":
|
case "ongoing":
|
||||||
return <Badge variant="primary">{t('contracts.withoutEndDate')}</Badge>;
|
return <Badge variant="primary">{t('contracts.withoutEndDate')}</Badge>;
|
||||||
default:
|
default:
|
||||||
@@ -209,8 +212,8 @@ export default function ContractsMainPage() {
|
|||||||
options: [
|
options: [
|
||||||
{ value: "all", label: "Wszystkie" },
|
{ value: "all", label: "Wszystkie" },
|
||||||
{ value: "active", label: "Aktywne" },
|
{ value: "active", label: "Aktywne" },
|
||||||
{ value: "completed", label: "Zakończone" },
|
{ value: "expired", label: "Przeterminowane" },
|
||||||
{ value: "no_end_date", label: "Bez daty końca" },
|
{ value: "ongoing", label: "W trakcie" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -221,7 +224,7 @@ export default function ContractsMainPage() {
|
|||||||
{ value: "contract_number", label: "Numer umowy" },
|
{ value: "contract_number", label: "Numer umowy" },
|
||||||
{ value: "contract_name", label: "Nazwa umowy" },
|
{ value: "contract_name", label: "Nazwa umowy" },
|
||||||
{ value: "customer", label: "Klient" },
|
{ value: "customer", label: "Klient" },
|
||||||
{ value: "start_date", label: "Data rozpoczęcia" },
|
{ value: "date_signed", label: "Data podpisania" },
|
||||||
{ value: "finish_date", label: "Data zakończenia" },
|
{ value: "finish_date", label: "Data zakończenia" },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -338,9 +341,9 @@ export default function ContractsMainPage() {
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<div className="ml-4">
|
<div className="ml-4">
|
||||||
<p className="text-sm font-medium text-gray-600">Zakończone</p>
|
<p className="text-sm font-medium text-gray-600">Przeterminowane</p>
|
||||||
<p className="text-2xl font-bold text-gray-900">
|
<p className="text-2xl font-bold text-gray-900">
|
||||||
{stats.completed}
|
{stats.expired}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user