<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.comfac.net/index.php?action=history&amp;feed=atom&amp;title=Projects_in_Process_Report_251023</id>
	<title>Projects in Process Report 251023 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.comfac.net/index.php?action=history&amp;feed=atom&amp;title=Projects_in_Process_Report_251023"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.comfac.net/index.php?title=Projects_in_Process_Report_251023&amp;action=history"/>
	<updated>2026-06-05T09:48:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://mediawiki.comfac.net/index.php?title=Projects_in_Process_Report_251023&amp;diff=37&amp;oldid=prev</id>
		<title>BabiSender: Created page with &quot;= Projects in Process Report =  This page documents the development history and SQL query versions for the &#039;&#039;&#039;Projects in Process&#039;&#039;&#039; custom report in ERPNext. Queries are listed from earliest to latest revision.  ----  == Report Columns ==  The final report includes the following columns:  * &#039;&#039;&#039;PROJECT ID&#039;&#039;&#039; – Link to Project * &#039;&#039;&#039;Department&#039;&#039;&#039; – Link to Department * &#039;&#039;&#039;Customer&#039;&#039;&#039; – Link to Customer * &#039;&#039;&#039;Earliest SO&#039;&#039;&#039; – Link to Sales Order * &#039;&#039;&#039;Estimated Start...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.comfac.net/index.php?title=Projects_in_Process_Report_251023&amp;diff=37&amp;oldid=prev"/>
		<updated>2026-02-25T06:53:50Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= Projects in Process Report =  This page documents the development history and SQL query versions for the &amp;#039;&amp;#039;&amp;#039;Projects in Process&amp;#039;&amp;#039;&amp;#039; custom report in ERPNext. Queries are listed from earliest to latest revision.  ----  == Report Columns ==  The final report includes the following columns:  * &amp;#039;&amp;#039;&amp;#039;PROJECT ID&amp;#039;&amp;#039;&amp;#039; – Link to Project * &amp;#039;&amp;#039;&amp;#039;Department&amp;#039;&amp;#039;&amp;#039; – Link to Department * &amp;#039;&amp;#039;&amp;#039;Customer&amp;#039;&amp;#039;&amp;#039; – Link to Customer * &amp;#039;&amp;#039;&amp;#039;Earliest SO&amp;#039;&amp;#039;&amp;#039; – Link to Sales Order * &amp;#039;&amp;#039;&amp;#039;Estimated Start...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Projects in Process Report =&lt;br /&gt;
&lt;br /&gt;
This page documents the development history and SQL query versions for the &amp;#039;&amp;#039;&amp;#039;Projects in Process&amp;#039;&amp;#039;&amp;#039; custom report in ERPNext. Queries are listed from earliest to latest revision.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Report Columns ==&lt;br /&gt;
&lt;br /&gt;
The final report includes the following columns:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PROJECT ID&amp;#039;&amp;#039;&amp;#039; – Link to Project&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Department&amp;#039;&amp;#039;&amp;#039; – Link to Department&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Customer&amp;#039;&amp;#039;&amp;#039; – Link to Customer&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Earliest SO&amp;#039;&amp;#039;&amp;#039; – Link to Sales Order&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Estimated Start Date&amp;#039;&amp;#039;&amp;#039; (or Earliest SO Date in earlier versions)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Total SI Items (Base, by Project)&amp;#039;&amp;#039;&amp;#039; – Currency&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Total Purchase Invoices (Grand Total)&amp;#039;&amp;#039;&amp;#039; – Currency&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Project MR (from Stores)&amp;#039;&amp;#039;&amp;#039; – Currency (Stock Entry withdrawals from Stores)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Project MRS (to Stores)&amp;#039;&amp;#039;&amp;#039; – Currency (Stock Entry returns to Stores)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Timesheets Costing Amount (by Project)&amp;#039;&amp;#039;&amp;#039; – Currency&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Remainder (SI - PI - MR - TS)&amp;#039;&amp;#039;&amp;#039; – Currency&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sales Order Items (List)&amp;#039;&amp;#039;&amp;#039; – Data&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Query Version History ==&lt;br /&gt;
&lt;br /&gt;
=== 250828 – Initial Working Version ===&lt;br /&gt;
Basic report with Project ID, Department, Customer, Sales Order Date. No Timesheets or MR/MRS columns yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
    proj.name AS &amp;quot;PROJECT ID:Link/Project:120&amp;quot;,&lt;br /&gt;
    proj.department AS &amp;quot;Department:Link/Department:150&amp;quot;,&lt;br /&gt;
    proj.customer AS &amp;quot;Customer:Link/Customer:200&amp;quot;,&lt;br /&gt;
    (&lt;br /&gt;
        SELECT MIN(so.transaction_date)&lt;br /&gt;
        FROM `tabSales Order` so&lt;br /&gt;
        WHERE so.company = proj.company&lt;br /&gt;
          AND (&lt;br /&gt;
              so.project = proj.name&lt;br /&gt;
              OR EXISTS (&lt;br /&gt;
                  SELECT 1 FROM `tabSales Order Item` soi&lt;br /&gt;
                  WHERE soi.parent = so.name AND soi.project = proj.name&lt;br /&gt;
              )&lt;br /&gt;
          )&lt;br /&gt;
    ) AS &amp;quot;Sales Order Date:Date:120&amp;quot;&lt;br /&gt;
FROM `tabProject` proj&lt;br /&gt;
WHERE proj.company = %(company)s&lt;br /&gt;
ORDER BY proj.name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 250828 – Added Sales Order Link + Items List ===&lt;br /&gt;
Added Sales Order name column and Sales Order Items list (plain text, no brackets).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
    proj.name AS &amp;quot;PROJECT ID:Link/Project:120&amp;quot;,&lt;br /&gt;
    proj.department AS &amp;quot;Department:Link/Department:150&amp;quot;,&lt;br /&gt;
    proj.customer AS &amp;quot;Customer:Link/Customer:200&amp;quot;,&lt;br /&gt;
    (&lt;br /&gt;
        SELECT so.name&lt;br /&gt;
        FROM `tabSales Order` so&lt;br /&gt;
        WHERE so.company = proj.company&lt;br /&gt;
          AND (&lt;br /&gt;
              so.project = proj.name&lt;br /&gt;
              OR EXISTS (&lt;br /&gt;
                  SELECT 1 FROM `tabSales Order Item` soi&lt;br /&gt;
                  WHERE soi.parent = so.name AND soi.project = proj.name&lt;br /&gt;
              )&lt;br /&gt;
          )&lt;br /&gt;
        ORDER BY so.transaction_date ASC, so.name ASC&lt;br /&gt;
        LIMIT 1&lt;br /&gt;
    ) AS &amp;quot;Sales Order:Link/Sales Order:180&amp;quot;,&lt;br /&gt;
    (&lt;br /&gt;
        SELECT MIN(so.transaction_date)&lt;br /&gt;
        FROM `tabSales Order` so&lt;br /&gt;
        WHERE so.company = proj.company&lt;br /&gt;
          AND (&lt;br /&gt;
              so.project = proj.name&lt;br /&gt;
              OR EXISTS (&lt;br /&gt;
                  SELECT 1 FROM `tabSales Order Item` soi&lt;br /&gt;
                  WHERE soi.parent = so.name AND soi.project = proj.name&lt;br /&gt;
              )&lt;br /&gt;
          )&lt;br /&gt;
    ) AS &amp;quot;Sales Order Date:Date:120&amp;quot;,&lt;br /&gt;
    (&lt;br /&gt;
        SELECT IFNULL(&lt;br /&gt;
            GROUP_CONCAT(IFNULL(soi.item_name, soi.item_code) ORDER BY soi.idx SEPARATOR &amp;#039;, &amp;#039;),&lt;br /&gt;
            &amp;#039;&amp;#039;&lt;br /&gt;
        )&lt;br /&gt;
        FROM `tabSales Order Item` soi&lt;br /&gt;
        WHERE soi.parent = (&lt;br /&gt;
            SELECT so.name&lt;br /&gt;
            FROM `tabSales Order` so&lt;br /&gt;
            WHERE so.company = proj.company&lt;br /&gt;
              AND (&lt;br /&gt;
                  so.project = proj.name&lt;br /&gt;
                  OR EXISTS (&lt;br /&gt;
                      SELECT 1 FROM `tabSales Order Item` soi2&lt;br /&gt;
                      WHERE soi2.parent = so.name AND soi2.project = proj.name&lt;br /&gt;
                  )&lt;br /&gt;
              )&lt;br /&gt;
            ORDER BY so.transaction_date ASC, so.name ASC&lt;br /&gt;
            LIMIT 1&lt;br /&gt;
        )&lt;br /&gt;
    ) AS &amp;quot;Sales Order Items (List):Data:360&amp;quot;&lt;br /&gt;
FROM `tabProject` proj&lt;br /&gt;
WHERE proj.company = %(company)s&lt;br /&gt;
ORDER BY proj.name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 250828 – Added Purchase Invoices + Project Stock Value ===&lt;br /&gt;
Added Total Purchase Invoices and Project Stock Value (current + as-of date) using Bin and Stock Ledger Entry.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WITH&lt;br /&gt;
earliest_so AS (&lt;br /&gt;
    SELECT &lt;br /&gt;
        p.name AS project,&lt;br /&gt;
        (&lt;br /&gt;
            SELECT so2.name&lt;br /&gt;
            FROM `tabSales Order` so2&lt;br /&gt;
            WHERE so2.company = p.company&lt;br /&gt;
              AND (so2.project = p.name OR EXISTS (&lt;br /&gt;
                  SELECT 1 FROM `tabSales Order Item` soi2&lt;br /&gt;
                  WHERE soi2.parent = so2.name AND soi2.project = p.name))&lt;br /&gt;
            ORDER BY so2.transaction_date ASC, so2.name ASC LIMIT 1&lt;br /&gt;
        ) AS so_name,&lt;br /&gt;
        (&lt;br /&gt;
            SELECT MIN(so3.transaction_date)&lt;br /&gt;
            FROM `tabSales Order` so3&lt;br /&gt;
            WHERE so3.company = p.company&lt;br /&gt;
              AND (so3.project = p.name OR EXISTS (&lt;br /&gt;
                  SELECT 1 FROM `tabSales Order Item` soi3&lt;br /&gt;
                  WHERE soi3.parent = so3.name AND soi3.project = p.name))&lt;br /&gt;
        ) AS so_date&lt;br /&gt;
    FROM `tabProject` p WHERE p.company = %(company)s&lt;br /&gt;
),&lt;br /&gt;
pi_totals AS (&lt;br /&gt;
    SELECT pii.project AS project, SUM(DISTINCT pi.grand_total) AS pi_total&lt;br /&gt;
    FROM `tabPurchase Invoice` pi&lt;br /&gt;
    JOIN `tabPurchase Invoice Item` pii ON pi.name = pii.parent&lt;br /&gt;
    WHERE pi.docstatus = 1&lt;br /&gt;
    GROUP BY pii.project&lt;br /&gt;
),&lt;br /&gt;
proj_wh AS (&lt;br /&gt;
    SELECT p.name AS project, p.company, w.name AS wh&lt;br /&gt;
    FROM `tabProject` p&lt;br /&gt;
    JOIN `tabWarehouse` w ON w.company = p.company AND w.`custom_project` = p.name&lt;br /&gt;
    WHERE p.company = %(company)s&lt;br /&gt;
),&lt;br /&gt;
bin_val AS (&lt;br /&gt;
    SELECT pw.project, SUM(b.actual_qty * IFNULL(b.valuation_rate, 0)) AS val_now&lt;br /&gt;
    FROM proj_wh pw&lt;br /&gt;
    JOIN `tabBin` b ON b.warehouse = pw.wh&lt;br /&gt;
    GROUP BY pw.project&lt;br /&gt;
),&lt;br /&gt;
asof_val AS (&lt;br /&gt;
    SELECT pw.project, SUM(sle.stock_value) AS val_asof&lt;br /&gt;
    FROM proj_wh pw&lt;br /&gt;
    JOIN (&lt;br /&gt;
        SELECT x.item_code, x.warehouse, IFNULL(x.batch_no, &amp;#039;&amp;#039;) AS batch_no,&lt;br /&gt;
               MAX(CONCAT(x.posting_date, &amp;#039; &amp;#039;, x.posting_time, &amp;#039; &amp;#039;, x.name)) AS maxkey&lt;br /&gt;
        FROM `tabStock Ledger Entry` x&lt;br /&gt;
        WHERE x.is_cancelled = 0 AND x.posting_date &amp;lt;= %(to_date)s&lt;br /&gt;
        GROUP BY x.item_code, x.warehouse, IFNULL(x.batch_no, &amp;#039;&amp;#039;)&lt;br /&gt;
    ) last ON last.warehouse = pw.wh&lt;br /&gt;
    JOIN `tabStock Ledger Entry` sle&lt;br /&gt;
      ON sle.item_code = last.item_code AND sle.warehouse = last.warehouse&lt;br /&gt;
     AND IFNULL(sle.batch_no, &amp;#039;&amp;#039;) = last.batch_no&lt;br /&gt;
     AND CONCAT(sle.posting_date, &amp;#039; &amp;#039;, sle.posting_time, &amp;#039; &amp;#039;, sle.name) = last.maxkey&lt;br /&gt;
    GROUP BY pw.project&lt;br /&gt;
)&lt;br /&gt;
SELECT&lt;br /&gt;
    p.name AS &amp;quot;PROJECT ID:Link/Project:120&amp;quot;,&lt;br /&gt;
    p.department AS &amp;quot;Department:Link/Department:150&amp;quot;,&lt;br /&gt;
    p.customer AS &amp;quot;Customer:Link/Customer:200&amp;quot;,&lt;br /&gt;
    e.so_name AS &amp;quot;Sales Order:Link/Sales Order:160&amp;quot;,&lt;br /&gt;
    e.so_date AS &amp;quot;Sales Order Date:Date:110&amp;quot;,&lt;br /&gt;
    (&lt;br /&gt;
        SELECT IFNULL(GROUP_CONCAT(IFNULL(soi.item_name, soi.item_code) ORDER BY soi.idx SEPARATOR &amp;#039;, &amp;#039;), &amp;#039;&amp;#039;)&lt;br /&gt;
        FROM `tabSales Order Item` soi WHERE soi.parent = e.so_name&lt;br /&gt;
    ) AS &amp;quot;Sales Order Items (List):Data:300&amp;quot;,&lt;br /&gt;
    COALESCE(pt.pi_total, 0) AS &amp;quot;Total Purchase Invoices (Grand Total):Currency:160&amp;quot;,&lt;br /&gt;
    COALESCE(bv.val_now, 0) AS &amp;quot;Project Stock Value (Current):Currency:160&amp;quot;,&lt;br /&gt;
    COALESCE(av.val_asof, 0) AS &amp;quot;Project Stock Value as of To Date:Currency:170&amp;quot;&lt;br /&gt;
FROM `tabProject` p&lt;br /&gt;
LEFT JOIN earliest_so e ON e.project = p.name&lt;br /&gt;
LEFT JOIN pi_totals pt  ON pt.project = p.name&lt;br /&gt;
LEFT JOIN bin_val bv    ON bv.project = p.name&lt;br /&gt;
LEFT JOIN asof_val av   ON av.project = p.name&lt;br /&gt;
WHERE p.company = %(company)s&lt;br /&gt;
ORDER BY p.name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 250901 – Added Timesheets Costing Amount ===&lt;br /&gt;
Timesheet costing amount column enabled. Stock Value columns still present at this stage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
    p.name AS &amp;quot;PROJECT ID:Link/Project:140&amp;quot;,&lt;br /&gt;
    p.department AS &amp;quot;Department:Link/Department:150&amp;quot;,&lt;br /&gt;
    p.customer AS &amp;quot;Customer:Link/Customer:200&amp;quot;,&lt;br /&gt;
    e.so_name AS &amp;quot;Earliest SO:Link/Sales Order:160&amp;quot;,&lt;br /&gt;
    e.so_date AS &amp;quot;Earliest SO Date:Date:110&amp;quot;,&lt;br /&gt;
    COALESCE(si.si_items_total_base, 0) AS &amp;quot;Total SI Items (Base, by Project):Currency:180&amp;quot;,&lt;br /&gt;
    COALESCE(pt.pi_total, 0) AS &amp;quot;Total Purchase Invoices (Grand Total):Currency:170&amp;quot;,&lt;br /&gt;
    COALESCE(av.val_asof, 0) AS &amp;quot;Project Stock Value (As of Last Movement):Currency:180&amp;quot;,&lt;br /&gt;
    COALESCE(ts.ts_costing_amount, 0) AS &amp;quot;Timesheets Costing Amount (by Project):Currency:180&amp;quot;,&lt;br /&gt;
    (&lt;br /&gt;
        SELECT IFNULL(GROUP_CONCAT(IFNULL(soi.item_name, soi.item_code) ORDER BY soi.idx SEPARATOR &amp;#039;, &amp;#039;), &amp;#039;&amp;#039;)&lt;br /&gt;
        FROM `tabSales Order Item` soi WHERE soi.parent = e.so_name&lt;br /&gt;
    ) AS &amp;quot;Sales Order Items (List):Data:300&amp;quot;&lt;br /&gt;
FROM `tabProject` p&lt;br /&gt;
/* ... (same LEFT JOINs as above) ... */&lt;br /&gt;
WHERE p.company = %(company)s&lt;br /&gt;
  AND ( %(project_like)s = &amp;#039;&amp;#039; OR p.name LIKE %(project_like)s )&lt;br /&gt;
ORDER BY p.name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 250901-01 – Replaced Stock Value with MR/MRS + Remainder Column ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Key changes:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Removed Project Stock Value column.&lt;br /&gt;
* Added &amp;#039;&amp;#039;&amp;#039;Project MR&amp;#039;&amp;#039;&amp;#039; (Stock Entry withdrawals where Source Warehouse LIKE &amp;lt;code&amp;gt;%Stores%&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Added &amp;#039;&amp;#039;&amp;#039;Project MRS&amp;#039;&amp;#039;&amp;#039; (Stock Entry returns where Target Warehouse LIKE &amp;lt;code&amp;gt;%Stores%&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Added &amp;#039;&amp;#039;&amp;#039;Remainder&amp;#039;&amp;#039;&amp;#039; column: SI Items − PI − MR − Timesheets.&lt;br /&gt;
* Replaced Earliest SO Date with &amp;#039;&amp;#039;&amp;#039;Estimated Start Date&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;p.expected_start_date&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
    p.name AS &amp;quot;PROJECT ID:Link/Project:140&amp;quot;,&lt;br /&gt;
    p.department AS &amp;quot;Department:Link/Department:150&amp;quot;,&lt;br /&gt;
    p.customer AS &amp;quot;Customer:Link/Customer:200&amp;quot;,&lt;br /&gt;
    e.so_name AS &amp;quot;Earliest SO:Link/Sales Order:160&amp;quot;,&lt;br /&gt;
    p.expected_start_date AS &amp;quot;Estimated Start Date:Date:110&amp;quot;,&lt;br /&gt;
    COALESCE(si.si_items_total_base, 0) AS &amp;quot;Total SI Items (Base, by Project):Currency:180&amp;quot;,&lt;br /&gt;
    COALESCE(pt.pi_total, 0) AS &amp;quot;Total Purchase Invoices (Grand Total):Currency:170&amp;quot;,&lt;br /&gt;
    COALESCE(mr.mr_amount, 0) AS &amp;quot;Project MR (from Stores):Currency:160&amp;quot;,&lt;br /&gt;
    COALESCE(mrs.mrs_amount, 0) AS &amp;quot;Project MRS (to Stores):Currency:160&amp;quot;,&lt;br /&gt;
    COALESCE(ts.ts_costing_amount, 0) AS &amp;quot;Timesheets Costing Amount (by Project):Currency:180&amp;quot;,&lt;br /&gt;
    (&lt;br /&gt;
        COALESCE(si.si_items_total_base, 0)&lt;br /&gt;
      - (COALESCE(pt.pi_total, 0) + COALESCE(mr.mr_amount, 0) + COALESCE(ts.ts_costing_amount, 0))&lt;br /&gt;
    ) AS &amp;quot;Remainder (SI - PI - MR - TS):Currency:160&amp;quot;,&lt;br /&gt;
    (&lt;br /&gt;
        SELECT IFNULL(GROUP_CONCAT(IFNULL(soi.item_name, soi.item_code) ORDER BY soi.idx SEPARATOR &amp;#039;, &amp;#039;), &amp;#039;&amp;#039;)&lt;br /&gt;
        FROM `tabSales Order Item` soi WHERE soi.parent = e.so_name&lt;br /&gt;
    ) AS &amp;quot;Sales Order Items (List):Data:300&amp;quot;&lt;br /&gt;
FROM `tabProject` p&lt;br /&gt;
LEFT JOIN (&lt;br /&gt;
    SELECT p2.name AS project,&lt;br /&gt;
        (SELECT so2.name FROM `tabSales Order` so2&lt;br /&gt;
         WHERE so2.company = p2.company&lt;br /&gt;
           AND (so2.project = p2.name OR EXISTS (&lt;br /&gt;
               SELECT 1 FROM `tabSales Order Item` soi2&lt;br /&gt;
               WHERE soi2.parent = so2.name AND soi2.project = p2.name))&lt;br /&gt;
         ORDER BY so2.transaction_date ASC, so2.name ASC LIMIT 1) AS so_name&lt;br /&gt;
    FROM `tabProject` p2&lt;br /&gt;
    WHERE p2.company = %(company)s&lt;br /&gt;
      AND ( %(project_like)s = &amp;#039;&amp;#039; OR p2.name LIKE %(project_like)s )&lt;br /&gt;
) e ON e.project = p.name&lt;br /&gt;
LEFT JOIN (&lt;br /&gt;
    SELECT t.project, SUM(t.grand_total) AS pi_total&lt;br /&gt;
    FROM (SELECT DISTINCT pi.name, pii.project, pi.grand_total&lt;br /&gt;
          FROM `tabPurchase Invoice` pi&lt;br /&gt;
          JOIN `tabPurchase Invoice Item` pii ON pi.name = pii.parent&lt;br /&gt;
          WHERE pi.docstatus = 1 AND pi.company = %(company)s&lt;br /&gt;
            AND pii.project IS NOT NULL AND pii.project != &amp;#039;&amp;#039;&lt;br /&gt;
            AND ( %(project_like)s = &amp;#039;&amp;#039; OR pii.project LIKE %(project_like)s )) t&lt;br /&gt;
    GROUP BY t.project&lt;br /&gt;
) pt ON pt.project = p.name&lt;br /&gt;
LEFT JOIN (&lt;br /&gt;
    SELECT COALESCE(NULLIF(sii.project, &amp;#039;&amp;#039;), &amp;#039;&amp;lt;&amp;lt;NO PROJECT&amp;gt;&amp;gt;&amp;#039;) AS project,&lt;br /&gt;
           SUM(sii.base_net_amount) AS si_items_total_base&lt;br /&gt;
    FROM `tabSales Invoice` si&lt;br /&gt;
    JOIN `tabSales Invoice Item` sii ON sii.parent = si.name&lt;br /&gt;
    WHERE si.docstatus = 1 AND si.company = %(company)s&lt;br /&gt;
      AND ( %(project_like)s = &amp;#039;&amp;#039; OR sii.project LIKE %(project_like)s )&lt;br /&gt;
    GROUP BY COALESCE(NULLIF(sii.project, &amp;#039;&amp;#039;), &amp;#039;&amp;lt;&amp;lt;NO PROJECT&amp;gt;&amp;gt;&amp;#039;)&lt;br /&gt;
) si ON si.project = p.name&lt;br /&gt;
LEFT JOIN (&lt;br /&gt;
    SELECT COALESCE(NULLIF(tsd.project, &amp;#039;&amp;#039;), &amp;#039;&amp;lt;&amp;lt;NO PROJECT&amp;gt;&amp;gt;&amp;#039;) AS project,&lt;br /&gt;
           SUM(tsd.costing_amount) AS ts_costing_amount&lt;br /&gt;
    FROM `tabTimesheet Detail` tsd&lt;br /&gt;
    JOIN `tabTimesheet` ts ON ts.name = tsd.parent&lt;br /&gt;
    WHERE ts.docstatus = 1 AND ts.company = %(company)s&lt;br /&gt;
      AND ( %(project_like)s = &amp;#039;&amp;#039; OR tsd.project LIKE %(project_like)s )&lt;br /&gt;
    GROUP BY COALESCE(NULLIF(tsd.project, &amp;#039;&amp;#039;), &amp;#039;&amp;lt;&amp;lt;NO PROJECT&amp;gt;&amp;gt;&amp;#039;)&lt;br /&gt;
) ts ON ts.project = p.name&lt;br /&gt;
LEFT JOIN (&lt;br /&gt;
    SELECT COALESCE(NULLIF(COALESCE(sed.project, se.project), &amp;#039;&amp;#039;), &amp;#039;&amp;lt;&amp;lt;NO PROJECT&amp;gt;&amp;gt;&amp;#039;) AS project,&lt;br /&gt;
           SUM(IFNULL(sed.basic_amount, 0)) AS mr_amount&lt;br /&gt;
    FROM `tabStock Entry` se&lt;br /&gt;
    JOIN `tabStock Entry Detail` sed ON sed.parent = se.name&lt;br /&gt;
    WHERE se.docstatus = 1 AND se.company = %(company)s&lt;br /&gt;
      AND ( %(project_like)s = &amp;#039;&amp;#039; OR COALESCE(sed.project, se.project) LIKE %(project_like)s )&lt;br /&gt;
      AND IFNULL(sed.s_warehouse, &amp;#039;&amp;#039;) LIKE &amp;#039;%%Stores%%&amp;#039;&lt;br /&gt;
    GROUP BY COALESCE(NULLIF(COALESCE(sed.project, se.project), &amp;#039;&amp;#039;), &amp;#039;&amp;lt;&amp;lt;NO PROJECT&amp;gt;&amp;gt;&amp;#039;)&lt;br /&gt;
) mr ON mr.project = p.name&lt;br /&gt;
LEFT JOIN (&lt;br /&gt;
    SELECT COALESCE(NULLIF(COALESCE(sed.project, se.project), &amp;#039;&amp;#039;), &amp;#039;&amp;lt;&amp;lt;NO PROJECT&amp;gt;&amp;gt;&amp;#039;) AS project,&lt;br /&gt;
           SUM(IFNULL(sed.basic_amount, 0)) AS mrs_amount&lt;br /&gt;
    FROM `tabStock Entry` se&lt;br /&gt;
    JOIN `tabStock Entry Detail` sed ON sed.parent = se.name&lt;br /&gt;
    WHERE se.docstatus = 1 AND se.company = %(company)s&lt;br /&gt;
      AND ( %(project_like)s = &amp;#039;&amp;#039; OR COALESCE(sed.project, se.project) LIKE %(project_like)s )&lt;br /&gt;
      AND IFNULL(sed.t_warehouse, &amp;#039;&amp;#039;) LIKE &amp;#039;%%Stores%%&amp;#039;&lt;br /&gt;
    GROUP BY COALESCE(NULLIF(COALESCE(sed.project, se.project), &amp;#039;&amp;#039;), &amp;#039;&amp;lt;&amp;lt;NO PROJECT&amp;gt;&amp;gt;&amp;#039;)&lt;br /&gt;
) mrs ON mrs.project = p.name&lt;br /&gt;
WHERE p.company = %(company)s&lt;br /&gt;
  AND ( %(project_like)s = &amp;#039;&amp;#039; OR p.name LIKE %(project_like)s )&lt;br /&gt;
ORDER BY p.name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Column Reference ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column&lt;br /&gt;
! Source&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Project ID&lt;br /&gt;
| &amp;lt;code&amp;gt;tabProject.name&amp;lt;/code&amp;gt;&lt;br /&gt;
| Link field&lt;br /&gt;
|-&lt;br /&gt;
| Department&lt;br /&gt;
| &amp;lt;code&amp;gt;tabProject.department&amp;lt;/code&amp;gt;&lt;br /&gt;
| Link field&lt;br /&gt;
|-&lt;br /&gt;
| Customer&lt;br /&gt;
| &amp;lt;code&amp;gt;tabProject.customer&amp;lt;/code&amp;gt;&lt;br /&gt;
| Link field&lt;br /&gt;
|-&lt;br /&gt;
| Earliest SO&lt;br /&gt;
| &amp;lt;code&amp;gt;tabSales Order&amp;lt;/code&amp;gt; (subquery)&lt;br /&gt;
| Matches SO header OR SO Item project link&lt;br /&gt;
|-&lt;br /&gt;
| Estimated Start Date&lt;br /&gt;
| &amp;lt;code&amp;gt;tabProject.expected_start_date&amp;lt;/code&amp;gt;&lt;br /&gt;
| Replaced SO Date in 250901-01&lt;br /&gt;
|-&lt;br /&gt;
| Total SI Items (Base)&lt;br /&gt;
| &amp;lt;code&amp;gt;tabSales Invoice Item.base_net_amount&amp;lt;/code&amp;gt;&lt;br /&gt;
| Submitted SIs only&lt;br /&gt;
|-&lt;br /&gt;
| Total Purchase Invoices&lt;br /&gt;
| &amp;lt;code&amp;gt;tabPurchase Invoice.grand_total&amp;lt;/code&amp;gt;&lt;br /&gt;
| Submitted PIs only; DISTINCT to avoid double-count&lt;br /&gt;
|-&lt;br /&gt;
| Project MR (from Stores)&lt;br /&gt;
| &amp;lt;code&amp;gt;tabStock Entry Detail.basic_amount&amp;lt;/code&amp;gt;&lt;br /&gt;
| Source Warehouse LIKE &amp;lt;code&amp;gt;%Stores%&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Project MRS (to Stores)&lt;br /&gt;
| &amp;lt;code&amp;gt;tabStock Entry Detail.basic_amount&amp;lt;/code&amp;gt;&lt;br /&gt;
| Target Warehouse LIKE &amp;lt;code&amp;gt;%Stores%&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Timesheets Costing Amount&lt;br /&gt;
| &amp;lt;code&amp;gt;tabTimesheet Detail.costing_amount&amp;lt;/code&amp;gt;&lt;br /&gt;
| Submitted timesheets only&lt;br /&gt;
|-&lt;br /&gt;
| Remainder&lt;br /&gt;
| SI − PI − MR − TS&lt;br /&gt;
| Calculated column&lt;br /&gt;
|-&lt;br /&gt;
| Sales Order Items (List)&lt;br /&gt;
| &amp;lt;code&amp;gt;tabSales Order Item.item_name&amp;lt;/code&amp;gt;&lt;br /&gt;
| GROUP_CONCAT, comma-separated, ordered by idx&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>BabiSender</name></author>
	</entry>
</feed>