Fieldpine Logo Documentation Home  

Saleline Pre Add Event


Goto: Talk To Fieldpine Home Page Talk To Fieldpine Events Overview

This event is generated when the POS is about to create and add a product to a sale. The saleline does not yet exist. This event can block this product being added to the sale by setting f200=0 in a REEV packet.

Trapping the Event

In your main dispatch loop, detect the event

while (bRun) {
	// Read a packet,  wait up to 60 seconds then return anyway.
	FieldpinePacket pPacket = Fdl.SimpleRead(pBuffer, 10*1000*1000, 60*1000);

	// Did we get anything?
	if (pPacket) {

		// Is this an evnt packet?
		if (memcmp(pBuffer, "EVNT", 4) == 0) {

			// Extract the Event number from the packet
			// Every event packet includes this field to say what it is exactly
			long EventNo = 0;
			Fdl.GetInt(pPacket, FIELDPINE_EVNT_EVENTNO, &EventNo);

			if (EventNo == FIELDPINE_EVENT_SALELINE_PRE_ADD) {
				FieldpinePacket pReply = PreSaleline(pPacket);
				if (pReply) {
					Fdl.ReplyTo_InOut(pPacket, pReply);
					Fdl.FreePacket(pReply);
				}
			}
		}

		Fdl.FreePacket(pPacket);
	}
}

Extracting and Processing New Item

This event includes a ADDI object that describes the item being added. It also includes a complete SALE object that we wish to add too.

FieldpinePacket PreSaleline(FieldpinePacket pRequest) {

	// Find the ADDI packet describing what is being added
	FieldpinePacket pAdd = theApp.Fdl.GetSubPacket(pRequest, "ADDI", 0);
	if (pAdd == NULL) return NULL;
	
	// Extract the Product Pid being added
	long Pid = 0;
	Fdl.GetInt(pAdd, 110, &Pid);

	// Release pAdd
	Fdl.FreePacket(pAdd);

	if (Pid == 44) {
		// Do not allow Pid 44

		// Create a command to send back to the POS
		FieldpinePacket pReply = theApp.Fdl.NewPacket("REEV");
		Fdl.SetInt(pReply, 200, 0);	// Command = block
		return pReply;
	}

	// Ok, allow it.  Send an allow reply
	FieldpinePacket pReply = theApp.Fdl.NewPacket("REEV");
	Fdl.SetInt(pReply, 200, 1);	// Command = allow
	return pReply;

}