Fishbowl ASN 856 EDI Query

Use this query to export the custom report of new new shipments from Fishbowl.

SELECT
    Pos01, Pos02, Pos03, Pos04, Pos05, Pos06, Pos07, Pos08, Pos09, Pos10,
    Pos11, Pos12, Pos13, Pos14, Pos15, Pos16, Pos17, Pos18, Pos19, Pos20,
    Pos21, Pos22, Pos23, Pos24, Pos25, Pos26, Pos27, Pos28, Pos29, Pos30,
    Pos31, Pos32, Pos33, Pos34, Pos35, Pos36, Pos37, Pos38, Pos39, Pos40,
    Pos41, Pos42
FROM (

    /* =========================
       S ROW - Shipment
       ========================= */
    SELECT
        sh.id AS SortShipment,
        1 AS SortRow,
        0 AS SortCarton,
        0 AS SortLine,

        'S' AS Pos01,
        '856SOPI' AS Pos02,

        COALESCE(
            NULLIF(TRIM(cust.accountingId), ''),
            ''
        ) AS Pos03,

        COALESCE(
            NULLIF(TRIM(sh.shipmentIdentificationNumber), ''),
            NULLIF(TRIM(sh.num), ''),
            CAST(sh.id AS CHAR),
            ''
        ) AS Pos04,

        COALESCE(
            NULLIF(TRIM(car.scac), ''),
            ''
        ) AS Pos05,

        '' AS Pos06,

        COALESCE(
            NULLIF(TRIM(sh.billOfLading), ''),
            ''
        ) AS Pos07,

        COALESCE(DATE_FORMAT(orderAgg.ScheduledDeliveryDate, '%Y%m%d'), '') AS Pos08,
        COALESCE(DATE_FORMAT(sh.dateShipped, '%Y%m%d'), '') AS Pos09,

        COALESCE(
            NULLIF(TRIM(sh.shipToName), ''),
            ''
        ) AS Pos10,

        COALESCE(
            NULLIF(TRIM(SUBSTRING_INDEX(REPLACE(sh.shipToAddress, '\r', ''), '\n', 1)), ''),
            ''
        ) AS Pos11,

        COALESCE(
            NULLIF(
                TRIM(
                    CASE
                        WHEN LOCATE('\n', REPLACE(sh.shipToAddress, '\r', '')) > 0 THEN
                            SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(sh.shipToAddress, '\r', ''), '\n', 2), '\n', -1)
                        ELSE ''
                    END
                ),
                ''
            ),
            ''
        ) AS Pos12,

        COALESCE(NULLIF(TRIM(sh.shipToCity), ''), '') AS Pos13,
        COALESCE(NULLIF(TRIM(shipState.code), ''), '') AS Pos14,
        COALESCE(NULLIF(TRIM(sh.shipToZip), ''), '') AS Pos15,

        COALESCE(
            NULLIF(CAST(sh.shipToId AS CHAR), ''),
            NULLIF(TRIM(cust.number), ''),
            ''
        ) AS Pos16,

        '' AS Pos17,
        '' AS Pos18,
        '' AS Pos19,

        CAST(COALESCE(cartonAgg.GrossWeight, 0) AS CHAR) AS Pos20,

        CASE
            WHEN LOWER(COALESCE(cartonAgg.WeightUOM, '')) IN ('lb', 'lbs', 'pound', 'pounds') THEN 'Pound'
            WHEN LOWER(COALESCE(cartonAgg.WeightUOM, '')) IN ('kg', 'kgs', 'kilogram', 'kilograms') THEN 'Kilogram'
            ELSE COALESCE(NULLIF(TRIM(cartonAgg.WeightUOM), ''), '')
        END AS Pos21,

        CAST(COALESCE(NULLIF(sh.cartonCount, 0), cartonAgg.CartonCount, 0) AS CHAR) AS Pos22,

        '' AS Pos23,
        '' AS Pos24,

        COALESCE(
            NULLIF(TRIM(shipFrom.addressName), ''),
            NULLIF(TRIM(shipFrom.name), ''),
            NULLIF(TRIM(lg.name), ''),
            NULLIF(TRIM(comp.name), ''),
            ''
        ) AS Pos25,

        COALESCE(
            NULLIF(TRIM(SUBSTRING_INDEX(REPLACE(shipFrom.address, '\r', ''), '\n', 1)), ''),
            ''
        ) AS Pos26,

        COALESCE(
            NULLIF(
                TRIM(
                    CASE
                        WHEN LOCATE('\n', REPLACE(shipFrom.address, '\r', '')) > 0 THEN
                            SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(shipFrom.address, '\r', ''), '\n', 2), '\n', -1)
                        ELSE ''
                    END
                ),
                ''
            ),
            ''
        ) AS Pos27,

        COALESCE(NULLIF(TRIM(shipFrom.city), ''), '') AS Pos28,
        COALESCE(NULLIF(TRIM(shipFromState.code), ''), '') AS Pos29,
        COALESCE(NULLIF(TRIM(shipFrom.zip), ''), '') AS Pos30,

        '' AS Pos31,
        '' AS Pos32,
        '' AS Pos33,
        '' AS Pos34,
        '' AS Pos35,
        '' AS Pos36,
        '' AS Pos37,
        '' AS Pos38,

        CASE
            WHEN COALESCE(shipThroughAgg.TotalShippedThroughShipment, 0) >= COALESCE(orderAgg.TotalOrderedOnOrder, 0)
                THEN 'CC'
            ELSE 'PR'
        END AS Pos39,

        '' AS Pos40,

        COALESCE(DATE_FORMAT(sh.dateShipped, '%H:%i'), '') AS Pos41,

        COALESCE(
            NULLIF(TRIM(car.name), ''),
            ''
        ) AS Pos42

    FROM ship sh
        INNER JOIN so ON so.id = sh.soId
        LEFT JOIN customer cust ON cust.id = so.customerId
        LEFT JOIN carrier car ON car.id = COALESCE(sh.carrierId, so.carrierId)
        LEFT JOIN stateconst shipState ON shipState.id = sh.shipToStateId
        LEFT JOIN locationgroup lg ON lg.id = sh.locationGroupId
        LEFT JOIN company comp ON comp.id = 1

        CROSS JOIN (
            SELECT
                COALESCE(
                    MAX(h.lastRunTime),
                    '1900-01-01 00:00:00'
                ) AS LastSuccessfulRun
            FROM fbschedulehistory h
                INNER JOIN fbschedule s ON s.id = h.scheduleId
            WHERE s.name = 'EDI 856 SOPI Auto Export'
                AND (
                    h.error IS NULL
                    OR TRIM(h.error) = ''
                    OR h.error LIKE 'Success%'
                )
        ) lastRun

        LEFT JOIN address shipFrom ON shipFrom.id = (
            SELECT a.id
            FROM address a
            WHERE a.locationGroupId = sh.locationGroupId
            ORDER BY a.defaultFlag DESC, a.id
            LIMIT 1
        )
        LEFT JOIN stateconst shipFromState ON shipFromState.id = shipFrom.stateId

        LEFT JOIN (
            SELECT
                sc.shipId,
                COUNT(sc.id) AS CartonCount,
                SUM(COALESCE(sc.freightWeight, 0)) AS GrossWeight,
                MAX(NULLIF(TRIM(sc.weightUOM), '')) AS WeightUOM
            FROM shipcarton sc
            GROUP BY sc.shipId
        ) cartonAgg ON cartonAgg.shipId = sh.id

        LEFT JOIN (
            SELECT
                soi.soId,
                SUM(COALESCE(soi.qtyOrdered, 0)) AS TotalOrderedOnOrder,
                MIN(soi.dateScheduledFulfillment) AS ScheduledDeliveryDate
            FROM soitem soi
            WHERE soi.productId IS NOT NULL
            GROUP BY soi.soId
        ) orderAgg ON orderAgg.soId = so.id

        LEFT JOIN (
            SELECT
                shBase.id AS ShipId,
                SUM(COALESCE(si2.qtyShipped, 0)) AS TotalShippedThroughShipment
            FROM ship shBase
                INNER JOIN ship sh2 ON sh2.soId = shBase.soId
                    AND sh2.dateShipped IS NOT NULL
                    AND (
                        sh2.dateShipped < shBase.dateShipped
                        OR (
                            sh2.dateShipped = shBase.dateShipped
                            AND sh2.id <= shBase.id
                        )
                    )
                INNER JOIN shipitem si2 ON si2.shipId = sh2.id
            GROUP BY shBase.id
        ) shipThroughAgg ON shipThroughAgg.ShipId = sh.id

    WHERE sh.soId IS NOT NULL
        AND sh.dateShipped IS NOT NULL
        AND sh.dateShipped > lastRun.LastSuccessfulRun


    UNION ALL


    /* =========================
       O ROW - Order
       ========================= */
    SELECT
        sh.id AS SortShipment,
        2 AS SortRow,
        0 AS SortCarton,
        0 AS SortLine,

        'O' AS Pos01,

        COALESCE(
            NULLIF(TRIM(so.customerPO), ''),
            ''
        ) AS Pos02,

        COALESCE(DATE_FORMAT(COALESCE(so.dateIssued, so.dateCreated), '%Y%m%d'), '') AS Pos03,

        '' AS Pos04,

        CAST(COALESCE(cartonAgg.GrossWeight, 0) AS CHAR) AS Pos05,

        '' AS Pos06,
        '' AS Pos07,

        CAST(COALESCE(NULLIF(sh.cartonCount, 0), cartonAgg.CartonCount, 0) AS CHAR) AS Pos08,

        '' AS Pos09,
        '' AS Pos10,
        '' AS Pos11,
        '' AS Pos12,
        '' AS Pos13,
        '' AS Pos14,
        '' AS Pos15,
        '' AS Pos16,
        '' AS Pos17,
        '' AS Pos18,
        '' AS Pos19,
        '' AS Pos20,
        '' AS Pos21,
        '' AS Pos22,
        '' AS Pos23,
        '' AS Pos24,
        '' AS Pos25,
        '' AS Pos26,
        '' AS Pos27,
        '' AS Pos28,
        '' AS Pos29,
        '' AS Pos30,
        '' AS Pos31,
        '' AS Pos32,
        '' AS Pos33,
        '' AS Pos34,
        '' AS Pos35,
        '' AS Pos36,
        '' AS Pos37,
        '' AS Pos38,
        '' AS Pos39,
        '' AS Pos40,
        '' AS Pos41,
        '' AS Pos42

    FROM ship sh
        INNER JOIN so ON so.id = sh.soId

        CROSS JOIN (
            SELECT
                COALESCE(
                    MAX(h.lastRunTime),
                    '1900-01-01 00:00:00'
                ) AS LastSuccessfulRun
            FROM fbschedulehistory h
                INNER JOIN fbschedule s ON s.id = h.scheduleId
            WHERE s.name = 'EDI 856 SOPI Auto Export'
                AND (
                    h.error IS NULL
                    OR TRIM(h.error) = ''
                    OR h.error LIKE 'Success%'
                )
        ) lastRun

        LEFT JOIN (
            SELECT
                sc.shipId,
                COUNT(sc.id) AS CartonCount,
                SUM(COALESCE(sc.freightWeight, 0)) AS GrossWeight
            FROM shipcarton sc
            GROUP BY sc.shipId
        ) cartonAgg ON cartonAgg.shipId = sh.id

    WHERE sh.soId IS NOT NULL
        AND sh.dateShipped IS NOT NULL
        AND sh.dateShipped > lastRun.LastSuccessfulRun


    UNION ALL


    /* =========================
       P ROW - Pack / Carton
       ========================= */
    SELECT
        sh.id AS SortShipment,
        3 AS SortRow,
        COALESCE(sc.cartonNum, sc.id) AS SortCarton,
        0 AS SortLine,

        'P' AS Pos01,

        COALESCE(
            NULLIF(TRIM(sc.sscc), ''),
            ''
        ) AS Pos02,

        CAST(COALESCE(packAgg.PackSize, 0) AS CHAR) AS Pos03,

        '' AS Pos04,
        '' AS Pos05,
        '' AS Pos06,
        '' AS Pos07,
        '' AS Pos08,
        '' AS Pos09,
        '' AS Pos10,
        '' AS Pos11,
        '' AS Pos12,

        COALESCE(
            NULLIF(TRIM(sc.trackingNum), ''),
            ''
        ) AS Pos13,

        '' AS Pos14,
        '' AS Pos15,
        '' AS Pos16,
        '' AS Pos17,
        '' AS Pos18,
        '' AS Pos19,
        '' AS Pos20,
        '' AS Pos21,
        '' AS Pos22,
        '' AS Pos23,
        '' AS Pos24,
        '' AS Pos25,
        '' AS Pos26,
        '' AS Pos27,
        '' AS Pos28,
        '' AS Pos29,
        '' AS Pos30,
        '' AS Pos31,
        '' AS Pos32,
        '' AS Pos33,
        '' AS Pos34,
        '' AS Pos35,
        '' AS Pos36,
        '' AS Pos37,
        '' AS Pos38,
        '' AS Pos39,
        '' AS Pos40,
        '' AS Pos41,
        '' AS Pos42

    FROM ship sh
        INNER JOIN so ON so.id = sh.soId
        INNER JOIN shipcarton sc ON sc.shipId = sh.id

        CROSS JOIN (
            SELECT
                COALESCE(
                    MAX(h.lastRunTime),
                    '1900-01-01 00:00:00'
                ) AS LastSuccessfulRun
            FROM fbschedulehistory h
                INNER JOIN fbschedule s ON s.id = h.scheduleId
            WHERE s.name = 'EDI 856 SOPI Auto Export'
                AND (
                    h.error IS NULL
                    OR TRIM(h.error) = ''
                    OR h.error LIKE 'Success%'
                )
        ) lastRun

        LEFT JOIN (
            SELECT
                si.shipCartonId,
                SUM(COALESCE(si.qtyShipped, 0)) AS PackSize
            FROM shipitem si
            GROUP BY si.shipCartonId
        ) packAgg ON packAgg.shipCartonId = sc.id

    WHERE sh.soId IS NOT NULL
        AND sh.dateShipped IS NOT NULL
        AND COALESCE(packAgg.PackSize, 0) <> 0
        AND sh.dateShipped > lastRun.LastSuccessfulRun


    UNION ALL


    /* =========================
       I ROW - Item
       ========================= */
    SELECT
        sh.id AS SortShipment,
        4 AS SortRow,
        COALESCE(sc.cartonNum, sc.id, 0) AS SortCarton,
        COALESCE(soi.soLineItem, si.id) AS SortLine,

        'I' AS Pos01,

        COALESCE(
            NULLIF(TRIM(soi.customerPartNum), ''),
            NULLIF(TRIM(product.num), ''),
            NULLIF(TRIM(soi.productNum), ''),
            ''
        ) AS Pos02,

        '' AS Pos03,

        COALESCE(
            NULLIF(TRIM(product.upc), ''),
            ''
        ) AS Pos04,

        COALESCE(
            NULLIF(TRIM(soi.description), ''),
            NULLIF(TRIM(product.description), ''),
            ''
        ) AS Pos05,

        CAST(COALESCE(soi.qtyOrdered, 0) AS CHAR) AS Pos06,

        COALESCE(
            NULLIF(TRIM(shipUom.code), ''),
            NULLIF(TRIM(soUom.code), ''),
            ''
        ) AS Pos07,

        CAST(COALESCE(si.qtyShipped, 0) AS CHAR) AS Pos08,

        '' AS Pos09,
        '' AS Pos10,
        '' AS Pos11,

        COALESCE(
            NULLIF(CAST(soi.soLineItem AS CHAR), ''),
            ''
        ) AS Pos12,

        '' AS Pos13,
        '' AS Pos14,
        '' AS Pos15,
        '' AS Pos16,
        '' AS Pos17,
        '' AS Pos18,
        '' AS Pos19,
        '' AS Pos20,
        '' AS Pos21,
        '' AS Pos22,
        '' AS Pos23,
        '' AS Pos24,
        '' AS Pos25,
        '' AS Pos26,
        '' AS Pos27,
        '' AS Pos28,
        '' AS Pos29,
        '' AS Pos30,
        '' AS Pos31,
        '' AS Pos32,
        '' AS Pos33,
        '' AS Pos34,
        '' AS Pos35,
        '' AS Pos36,
        '' AS Pos37,
        '' AS Pos38,
        '' AS Pos39,
        '' AS Pos40,
        '' AS Pos41,
        '' AS Pos42

    FROM ship sh
        INNER JOIN so ON so.id = sh.soId
        INNER JOIN shipitem si ON si.shipId = sh.id
        LEFT JOIN shipcarton sc ON sc.id = si.shipCartonId
        LEFT JOIN soitem soi ON soi.id = si.soItemId
        LEFT JOIN product ON product.id = soi.productId
        LEFT JOIN uom shipUom ON shipUom.id = si.uomId
        LEFT JOIN uom soUom ON soUom.id = soi.uomId

        CROSS JOIN (
            SELECT
                COALESCE(
                    MAX(h.lastRunTime),
                    '1900-01-01 00:00:00'
                ) AS LastSuccessfulRun
            FROM fbschedulehistory h
                INNER JOIN fbschedule s ON s.id = h.scheduleId
            WHERE s.name = 'EDI 856 SOPI Auto Export'
                AND (
                    h.error IS NULL
                    OR TRIM(h.error) = ''
                    OR h.error LIKE 'Success%'
                )
        ) lastRun

    WHERE sh.soId IS NOT NULL
        AND sh.dateShipped IS NOT NULL
        AND COALESCE(si.qtyShipped, 0) <> 0
        AND sh.dateShipped > lastRun.LastSuccessfulRun

) SOPI
ORDER BY
    SortShipment,
    CASE
        WHEN Pos01 = 'S' THEN 1
        WHEN Pos01 = 'O' THEN 2
        WHEN Pos01 IN ('P', 'I') THEN 3
        ELSE 9
    END,
    SortCarton,
    CASE
        WHEN Pos01 = 'P' THEN 1
        WHEN Pos01 = 'I' THEN 2
        ELSE 0
    END,
    SortLine;