btn_val = digitalRead(BUTTON); // read input value and store it fresh
// check if there was a transition
if ((btn_val == HIGH)) {
Wrong. The if statement is NOT checking for a transition. It is simply checking for a state. That could be the same state as last time.
Ethernet.begin(mac);
Udp.begin(localPort);
This should be done in setup(), not in loop().
if (shop_status == 0) { // then that means we're now OPEN
Serial.print("shop_status: ");
Serial.println(shop_status);
Serial.println("");
getTime();
} else { // or else shop_status == 1, which means that we're now CLOSED
Serial.print("shop_status: ");
Serial.println(shop_status);
Serial.println("");
getTime();
Why? You do the same stuff in both cases. This code doesn't belong in the if/else blocks.
I see you still haven't ditched the String class...