Sunday, September 7, 2025

Important

 https://www.youtube.com/watch?v=NWLyoCYEe0A

SP

 

ALTER PROCEDURE [dbo].[PartNumberValidation_SELECT]
  @PartNumber AS VARCHAR(80),
  @PO AS         VARCHAR(80) = NULL,
  @Badge         INT = NULL,
  @OrderType AS  VARCHAR(50) = NULL,
  @Quantity      INT = NULL,
  @Result        BIT output
AS
  BEGIN

    SET nocount ON;

    IF @OrderType IS NULL
     
BEGIN
      IF EXISTS ( 1 (/* condition */))
      BEGIN
        SET @Result = 1;
      END

      else
      BEGIN
        SET @Result = 0;
      END

     END
    ELSE
    BEGIN
      IF EXISTS ( 1 )
      BEGIN
        SET @Result = 1;
      END
      else
      BEGIN
        -- Check the second condition
        IF EXISTS ( 1 )
        BEGIN
          SET @Result = 1;
        END
        else
        BEGIN
          SET @Result = 0;
        END
      END
    END
  END


Debug

USE [TeamViewer_DYN];

 

DECLARE @PO NVARCHAR(50) = '000044444447';

 

DECLARE 
    @Material NVARCHAR(50),
    @QuantityCOHV INT,
    @CartType NVARCHAR(50),
    @CartID INT,
    @CartName NVARCHAR(50),
    @CartTypeVal NVARCHAR(50),
    @KItem NVARCHAR(50),
    @ProfitCenter NVARCHAR(50);

 

-- Step 1: Get COHV Order details
SELECT 
    @Material = ItemID,
    @QuantityCOHV = QTY,
    @ProfitCenter = ProfitCenter
FROM EWI_DataWarehouse.dbo.COHV
WHERE PO = @PO;

 

PRINT 'Step 1: Material=' + ISNULL(@Material,'NULL') + 
      ', QuantityCOHV=' + ISNULL(CAST(@QuantityCOHV AS NVARCHAR),'NULL') +
      ', ProfitCenter=' + ISNULL(@ProfitCenter,'NULL');

 

-- Step 2: Get KItem from BOMDTL
SET @KItem = (
    SELECT TOP 1 B.Component
    FROM EWI_DataWarehouse.dbo.BOMDTL B
    WHERE B.Item = @Material AND B.Component LIKE '%-K'
);

 

PRINT 'Step 2: KItem=' + ISNULL(@KItem,'NULL');

 

-- Step 3: Determine CartType
SET @CartType = CASE 
    WHEN @Material LIKE 'N10%' THEN 'Box'
    WHEN @Material LIKE 'N22%' THEN 'Cover'
    ELSE NULL
END;

 

PRINT 'Step 3: CartType=' + ISNULL(@CartType,'NULL');

 

-- Step 4: Get BOM Details into temp table
SELECT DISTINCT
    @Material AS Material,
    @QuantityCOHV AS COHVQty,
    B.Component,
    B.Qty,
    P.Bin AS PickBin
INTO #KitComponents
FROM EWI_DataWarehouse.dbo.BOMDTL B
LEFT JOIN TeamViewer_DYN.dbo.PickBins P
    ON B.Component = P.Material
WHERE B.Item = @KItem;

 

PRINT 'Step 4: Inserted into #KitComponents';
SELECT * FROM #KitComponents; -- Debug view

 

-- Step 5: Get the next available CartID and CartType
SELECT TOP 1
    @CartID = CartID,
    @CartName = CartName,
    @CartTypeVal = CartType
FROM TeamViewer_DYN.dbo.Carts
WHERE inUse = 0 AND CartType = @CartType
ORDER BY CartID;

 

PRINT 'Step 5: CartID=' + ISNULL(CAST(@CartID AS NVARCHAR),'NULL') +
      ', CartName=' + ISNULL(@CartName,'NULL') +
      ', CartTypeVal=' + ISNULL(@CartTypeVal,'NULL');

 

IF @CartID IS NULL
BEGIN
    PRINT 'Step 5: NO CARTS AVAILABLE';
    DROP TABLE #KitComponents;
    RETURN;
END

 

-- Step 6: Insert into ScanOrderHistory
DECLARE @Suffixes TABLE (Suffix CHAR(1));

 

IF @QuantityCOHV = 1
    INSERT INTO @Suffixes VALUES ('A');
ELSE IF @QuantityCOHV = 2
    INSERT INTO @Suffixes VALUES ('A'), ('B');
ELSE IF @QuantityCOHV = 3
    INSERT INTO @Suffixes VALUES ('A'), ('B'), ('C');
ELSE IF @QuantityCOHV = 4
    INSERT INTO @Suffixes VALUES ('A'), ('B'), ('C'), ('D');
ELSE
    INSERT INTO @Suffixes VALUES ('A');

 

PRINT 'Step 6: Suffixes added';
SELECT * FROM @Suffixes;

 

INSERT INTO [TeamViewer_DYN].[dbo].[ScanOrderHistory] (
    PO, Material, COHVQty, Component, BOMQty, CartID, CartType, CartName, CartBin, PickBin, ProfitCenter
)
SELECT 
    @PO,
    kc.Material,
    kc.COHVQty,
    kc.Component,
    kc.Qty,
    @CartID,
    @CartTypeVal,
    @CartName,
    CAST(@CartType + CAST(@CartID AS VARCHAR(10)) AS VARCHAR(20)) + s.Suffix AS CartBin,
    kc.PickBin,
    @ProfitCenter
FROM #KitComponents kc
CROSS JOIN @Suffixes s
WHERE kc.PickBin IS NOT NULL;

 

PRINT 'Step 6: Inserted into ScanOrderHistory';

 

-- Step 7: Mark the cart as InUse
UPDATE TeamViewer_DYN.dbo.Carts
SET inUse = 1
WHERE CartID = @CartID;

 

PRINT 'Step 7: Cart marked as InUse';

 

-- Step 8: Return inserted rows
PRINT 'Step 8: Returning inserted rows';
SELECT * FROM [TeamViewer_DYN].[dbo].[ScanOrderHistory] WHERE PO = @PO;

 

DROP TABLE #KitComponents;

Saturday, July 26, 2025

SQL




USE [EWI_DataWarehouse] GO ALTER PROCEDURE [dbo].[SP_EXP_FuelTankPlumbingMatch_KTanks_SELECT] AS BEGIN SET NOCOUNT ON; DELETE EXP_FuelTankPlumbingMatch_KTanks --CLEANUP -- Declare variable for TankTypeId DECLARE @TankTypeId UNIQUEIDENTIFIER; -- Cursor to loop through active TankTypeIds DECLARE tank_cursor CURSOR FOR SELECT TankTypeId FROM EXP_FuelTankType WHERE IsActive = 1; OPEN tank_cursor; FETCH NEXT FROM tank_cursor INTO @TankTypeId; WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Processing TankTypeId: ' + CAST(@TankTypeId AS NVARCHAR(36)); -- Declare variables for the columns of EXP_FuelTankPlumbingMatchProperties DECLARE @Id UNIQUEIDENTIFIER, @Prefix NVARCHAR(50), @Identifier NVARCHAR(50), @IdentifierPosition INT, @PartNumberCharacter NVARCHAR(50), @Value NVARCHAR(255), @TankTypeIdProp UNIQUEIDENTIFIER, @IsActive BIT; -- Cursor for matching properties DECLARE properties_cursor CURSOR FOR SELECT Id, Prefix, Identifier, IdentifierPosition, PartNumberCharacter, Value, TankTypeId, IsActive FROM EXP_FuelTankPlumbingMatchProperties WHERE TankTypeId = @TankTypeId; OPEN properties_cursor; FETCH NEXT FROM properties_cursor INTO @Id, @Prefix, @Identifier, @IdentifierPosition, @PartNumberCharacter, @Value, @TankTypeIdProp, @IsActive; WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Match found for TankTypeId: ' + CAST(@TankTypeId AS NVARCHAR(36)) + ', Id: ' + CAST(@Id AS NVARCHAR(36)) + ', Prefix: ' + ISNULL(@Prefix, '') + ', Identifier: ' + ISNULL(@Identifier, '') + ', IdentifierPosition: ' + CAST(@IdentifierPosition AS NVARCHAR(10)) + ', PartNumberCharacter: ' + ISNULL(@PartNumberCharacter, '') + ', Value: ' + ISNULL(@Value, '') + ', IsActive: ' + CAST(@IsActive AS NVARCHAR(1)); -- Declare variables for BOM loop DECLARE @Item VARCHAR(255); DECLARE @Description VARCHAR(255); DECLARE item_cursor CURSOR FOR SELECT TOP 10 -- TEST PURPOSE (Later remove TOP 10) B.Item, B.[Description] FROM [EWI_DataWarehouse].dbo.BOMDTL B INNER JOIN [EWI_DataWarehouse].dbo.OpenJITs O ON B.Item = O.ItemId WHERE B.Item LIKE @Prefix; OPEN item_cursor; FETCH NEXT FROM item_cursor INTO @Item, @Description; WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Item: ' + @Item + ', Description: ' + @Description; -- Extract IdentifierValue (example snippet, not used further) DECLARE @IdentifierValue AS NVARCHAR(1)= ( SELECT CASE WHEN @Item IS NULL OR LEN(@Item) < 1 THEN '-' ELSE SUBSTRING(@Item, @IdentifierPosition, 1) END AS IdentifierValue ) -- Get TankType string for current TankTypeId DECLARE @TankType NVARCHAR(MAX) = ( SELECT TOP 1 TankType FROM EXP_FuelTankType WHERE TankTypeId = @TankTypeIdProp ); PRINT 'TankType:' + ISNULL(@TankType, '') + ' Item:' + @Item + ' Value:' + ISNULL(@Value, ''); -- Declare order-related variables DECLARE @ChassisNbr NVARCHAR(36), @LineSeqNbr NVARCHAR(50), @QtyOrdered INT, @DateShipReq DATETIME, @OrderStatus INT; SELECT @ChassisNbr = O.ChassisNbr, @LineSeqNbr = O.LineSeqNbr, @QtyOrdered = O.QtyOrdered, @DateShipReq = O.DateShipReq, @OrderStatus = O.OrderStatus FROM [EWI_DataWarehouse].dbo.BOMDTL B INNER JOIN [EWI_DataWarehouse].dbo.OpenJITs O ON O.ItemID = B.Item WHERE B.Item = @Item; SELECT [Value] FROM EXP_FuelTankPlumbingMatchProperties WHERE TankTypeId=@TankTypeId AND Identifier= @IdentifierValue -- Insert into target table INSERT INTO EXP_FuelTankPlumbingMatch_KTanks ( ChassisNbr, MatchedLineSeqNbr, QtyOrdered, TankTypeId, Side, Part, DateShipReq, IsMatch, OrderStatus ) VALUES ( @ChassisNbr, @LineSeqNbr, @QtyOrdered, @TankTypeId, @IdentifierValue, @Item, @DateShipReq, 1, @OrderStatus ); FETCH NEXT FROM item_cursor INTO @Item, @Description; END CLOSE item_cursor; DEALLOCATE item_cursor; FETCH NEXT FROM properties_cursor INTO @Id, @Prefix, @Identifier, @IdentifierPosition, @PartNumberCharacter, @Value, @TankTypeIdProp, @IsActive; END CLOSE properties_cursor; DEALLOCATE properties_cursor; FETCH NEXT FROM tank_cursor INTO @TankTypeId; END CLOSE tank_cursor; DEALLOCATE tank_cursor; -- Final SELECT statement to return results SELECT FTPM.ChassisNbr AS [CHASSIS], FTPM.MatchedLineSeqNbr AS [SEQUENCE], FTPM.Part AS [PART_NUMBER], TT.TankType AS [TANK_TYPE], --K3 FTPM.Side AS [SIDE], --LEFT/RIGHT FTPM.DateShipReq AS [DATE_SHIP_REQUIRED], FTPM.IsMatch AS [IS_MATCH], FTPM.QtyOrdered AS [QUANTITY], FTPM.OrderStatus AS [ORDER_STATUS] FROM EXP_FuelTankPlumbingMatch_KTanks FTPM INNER JOIN EXP_FuelTankType TT ON TT.TankTypeId = FTPM.TankTypeId; END

 

Saturday, June 21, 2025

TWIN MODULE - Dyncraft

eBom vs mBom 

SELECT distinct * FROM [DataStage].[dbo].[CUMEBOM_LOADING] as CL where CL.LineSeqNbr='T0890F0' and CL.ChassisNbr='790040';

select * from EWI_DataWarehouse.dbo.OpenJITs as OJT where OJT.LineSeqNbr ='T0890F0';

select * from EWI_DataWarehouse.dbo.OpenJITs as OJT where OJT.ItemID ='M86-6301-127106';

SignalR

--ALTER DATABASE SignalR SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;


SELECT is_broker_enabled FROM sys.databases WHERE name = 'SignalR';


CREATE TABLE [dbo].[ToolInfo](
[ToolID] [int] IDENTITY(1,1) NOT NULL,
[ToolName] [nvarchar](50) NOT NULL,
[Status] [bit] NOT NULL,
[SequenceNo] [nchar](10) NULL,
 CONSTRAINT [PK_ToolInfo] PRIMARY KEY CLUSTERED 
(
[ToolID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[ToolInfo] ON 
GO
INSERT [dbo].[ToolInfo] ([ToolID], [ToolName], [Status], [SequenceNo]) VALUES (1, N'tool1', 0, N'1         ')
GO
INSERT [dbo].[ToolInfo] ([ToolID], [ToolName], [Status], [SequenceNo]) VALUES (2, N'tool44', 1, N'1         ')
GO
INSERT [dbo].[ToolInfo] ([ToolID], [ToolName], [Status], [SequenceNo]) VALUES (3, N'tool3', 1, N'2         ')
GO
INSERT [dbo].[ToolInfo] ([ToolID], [ToolName], [Status], [SequenceNo]) VALUES (4, N'tool4', 1, N'2         ')
GO
SET IDENTITY_INSERT [dbo].[ToolInfo] OFF
GO

update ToolInfo set ToolName='tool44'
where ToolID=2

SignalR maintains a persistent, real-time connection between client and server by using WebSockets.

Persistent Connection:
This means that the connection between the client (such as a web browser) and the server stays open and active over a period of time, rather than opening and closing repeatedly for each communication.

SignalR leverages WebSockets or other transport alternatives:
SignalR is a real-time communication library for web applications. It primarily uses WebSockets, which is a modern protocol that allows two-way communication between the client and server over a single, long-lived connection


SignalR ensures that the client and server remain continuously connected and can send messages to each other in real-time. This is useful for applications like chat apps, live notifications, gaming, or any scenario requiring immediate updates without the need to refresh the page


https://assemblytools.na.panasonic.com/assembly-tools/accessories/controllers

Tuesday, April 1, 2025

Angular

 

What is Angular?

English:
Angular is a TypeScript-based front-end framework developed by Google. It is used to build dynamic, single-page web applications (SPAs) with a component-based architecture.

Bangla:
Angular হলো একটি TypeScript-ভিত্তিক ফ্রন্ট-এন্ড ফ্রেমওয়ার্ক, যা Google দ্বারা তৈরি। এটি ডাইনামিক, সিঙ্গেল-পেজ ওয়েব অ্যাপ্লিকেশন (SPA) তৈরি করতে ব্যবহৃত হয় এবং কম্পোনেন্ট-ভিত্তিক আর্কিটেকচার অনুসরণ করে।


Core Features (মূল বৈশিষ্ট্য):

English:

  • Component-based architecture

  • Two-way data binding
  • Dependency Injection
  • Routing for SPAs
  • Built-in directives and pipes

Bangla:

  • কম্পোনেন্ট-ভিত্তিক আর্কিটেকচার
  • টু-ওয়ে ডাটা বাইন্ডিং
  • ডিপেনডেন্সি ইনজেকশন
  • SPA-এর জন্য রাউটিং
  • বিল্ট-ইন ডিরেক্টিভ এবং পাইপস

    Why Use Angular? (কেন Angular ব্যবহার করব?)

    English:

    • Strong structure for large applications
    • Built-in tools for forms, HTTP, and routing
    • High performance and maintainability
    • Backed by Google and large community

    Bangla:

    • বড় অ্যাপ্লিকেশনের জন্য শক্তিশালী স্ট্রাকচার
    • ফর্ম, HTTP, এবং রাউটিং-এর জন্য বিল্ট-ইন টুলস
    • উচ্চ পারফরম্যান্স এবং সহজ মেইনটেন্যান্স
    • Google এবং বড় কমিউনিটির সাপোর্ট

      Angular Project Structure

      my-angular-app/
      │
      ├── node_modules/        → **English:** Installed dependencies  
      │                         → **Bangla:** ইনস্টল করা লাইব্রেরি ও প্যাকেজ
      │
      ├── src/                 → **English:** Main source code folder  
      │   │                     → **Bangla:** মূল সোর্স কোড ফোল্ডার
      │   ├── app/             → **English:** Application components, modules, services  
      │   │                     → **Bangla:** অ্যাপ্লিকেশনের কম্পোনেন্ট, মডিউল, সার্ভিস
      │   ├── assets/          → **English:** Images, CSS, static files  
      │   │                     → **Bangla:** ইমেজ, CSS, স্ট্যাটিক ফাইল
      │   ├── environments/    → **English:** Environment-specific configs  
      │   │                     → **Bangla:** এনভায়রনমেন্ট অনুযায়ী কনফিগারেশন
      │   ├── index.html       → **English:** Main HTML file  
      │   │                     → **Bangla:** প্রধান HTML ফাইল
      │   ├── main.ts          → **English:** Entry point for Angular app  
      │   │                     → **Bangla:** Angular অ্যাপের এন্ট্রি পয়েন্ট
      │   ├── styles.css       → **English:** Global styles  
      │                         → **Bangla:** গ্লোবাল স্টাইল
      │
      ├── angular.json         → **English:** Angular configuration file  
      │                         → **Bangla:** Angular কনফিগারেশন ফাইল
      ├── package.json         → **English:** Project dependencies and scripts  
      │                         → **Bangla:** প্রোজেক্টের ডিপেনডেন্সি ও স্ক্রিপ্ট
      ├── tsconfig.json        → **English:** TypeScript configuration  
      │                         → **Bangla:** TypeScript কনফিগারেশন
      

      Key Points

      • app/ ফোল্ডারে আপনার কম্পোনেন্ট, সার্ভিস, মডিউল থাকবে।
      • assets/ ফোল্ডারে ইমেজ, CSS, এবং অন্যান্য স্ট্যাটিক ফাইল থাকবে।
      • angular.json ফাইল প্রোজেক্টের বিল্ড ও কনফিগারেশন নিয়ন্ত্রণ করে।
      • package.json ফাইল ডিপেনডেন্সি ও npm স্ক্রিপ্ট ম্যানেজ করে।

        1. Angular Service তৈরি কিভাবে?

        English:
        Angular service is used to share data or logic across components. You create it using Angular CLI:


        ng generate service my-service
        This creates my-service.service.ts file. Then you inject it into a component using Dependency Injection.

        Bangla:
        Angular সার্ভিস ব্যবহার করা হয় কম্পোনেন্টগুলোর মধ্যে ডাটা বা লজিক শেয়ার করার জন্য। CLI দিয়ে সার্ভিস তৈরি করা যায়:


        ng generate service my-service

        এটি my-service.service.ts ফাইল তৈরি করবে। এরপর সার্ভিসকে কম্পোনেন্টে Dependency Injection এর মাধ্যমে ব্যবহার করা হয়।

        2. Angular Module কিভাবে কাজ করে?

        English:
        Angular module (@NgModule) is a container for components, directives, pipes, and services. It organizes the application into functional blocks.

        • AppModule is the root module.
        • Modules declare components and import other modules.

        Bangla:
        Angular মডিউল (@NgModule) হলো একটি কন্টেইনার যেখানে কম্পোনেন্ট, ডিরেক্টিভ, পাইপ এবং সার্ভিস থাকে। এটি অ্যাপ্লিকেশনকে ফাংশনাল ব্লকে ভাগ করে।

        • AppModule হলো মূল মডিউল।
        • মডিউল কম্পোনেন্ট ডিক্লেয়ার করে এবং অন্য মডিউল ইমপোর্ট করে।

        3. Angular Component Lifecycle (কম্পোনেন্টের জীবনচক্র):

        English:
        Angular components have lifecycle hooks:

        1. ngOnInit() – Called after component initialization.
        2. ngOnChanges() – Called when input properties change.
        3. ngDoCheck() – Custom change detection.
        4. ngAfterViewInit() – After view initialization.
        5. ngOnDestroy() – Before component is destroyed.

        Bangla:
        Angular কম্পোনেন্টের লাইফসাইকেল হুকগুলো হলো:

        1. ngOnInit() – কম্পোনেন্ট ইনিশিয়ালাইজ হওয়ার পর কল হয়।
        2. ngOnChanges() – ইনপুট প্রপার্টি পরিবর্তন হলে কল হয়।
        3. ngDoCheck() – কাস্টম চেঞ্জ ডিটেকশন।
        4. ngAfterViewInit() – ভিউ ইনিশিয়ালাইজ হওয়ার পর কল হয়।
        5. ngOnDestroy() – কম্পোনেন্ট ধ্বংস হওয়ার আগে কল হয়।

          Why Angular Component?

          English:
          Angular components are the building blocks of an Angular application. They allow you to:

          1. Encapsulate UI and Logic – Each component handles its own HTML, CSS, and TypeScript logic.
          2. Reusability – Components can be reused across different parts of the application.
          3. Maintainability – Breaking the app into smaller components makes it easier to manage and update.
          4. Data Binding – Components support one-way and two-way data binding for dynamic UI updates.
          5. Lifecycle Management – Components have lifecycle hooks for initialization, updates, and cleanup.

          Bangla:
          Angular কম্পোনেন্ট হলো অ্যাপ্লিকেশনের মূল বিল্ডিং ব্লক। এর সুবিধাগুলো হলো:

          1. UI এবং লজিক আলাদা রাখা – প্রতিটি কম্পোনেন্টের নিজস্ব HTML, CSS, এবং TypeScript লজিক থাকে।
          2. পুনঃব্যবহারযোগ্যতা – কম্পোনেন্টগুলো অ্যাপের বিভিন্ন অংশে পুনঃব্যবহার করা যায়।
          3. সহজ মেইনটেন্যান্স – ছোট ছোট কম্পোনেন্টে ভাগ করলে অ্যাপ ম্যানেজ করা সহজ হয়।
          4. ডাটা বাইন্ডিং – কম্পোনেন্টে ওয়ান-ওয়ে এবং টু-ওয়ে ডাটা বাইন্ডিং সাপোর্ট করে।
          5. লাইফসাইকেল ম্যানেজমেন্ট – কম্পোনেন্টে ইনিশিয়ালাইজেশন, আপডেট এবং ক্লিনআপের জন্য লাইফসাইকেল হুক থাকে।

        6. Observables and Promises are two different ways to handle asynchronous operation

Microsoft Power Platform

 Microsoft Power Platform একটি কম্প্রিহেনসিভ টুলসেট, যা ব্যবসায়িক অ্যানালাইটিক্স, অ্যাপ্লিকেশন ডেভেলপমেন্ট, স্বয়ংক্রিয় কাজ এবং ভার্চুয়াল...