@Override
  public boolean createOrUpdateSparePart(
      String electronicShopID,
      String sparePartID,
      String name,
      String sparePartGroupID,
      String description,
      double deliveryPrice,
      String measuringUnit) {

    boolean flagNew = false;

    // check if we know that shop
    if (!ConfigurationProperties.getElectronicShopID().equals(electronicShopID)) {
      logger.warning("electronicShopID \"" + electronicShopID + "\" not known!");
      return false;
    }

    List<SparePart> spl = SparePart.queryGetByForeignID(sparePartID, 0, 1);
    SparePart sp;
    if (spl.size() == 0) {
      sp = new SparePart();
      flagNew = true;
    } else {
      sp = spl.get(0);
    }
    try {
      List<SparePartGroup> sparePartGroup =
          SparePartGroup.queryGetByForeignID(sparePartGroupID, 0, 1);
      if (sparePartGroup.size() == 0) {
        logger.warning("sparePartGroupID \"" + sparePartGroupID + "\" not known!");
        return false;
      }

      sp.setForeignID(sparePartID);
      sp.setSparePartGroupID(sparePartGroup.get(0).getID());
      sp.setName(name);
      sp.setDescription(description);
      sp.setDeliveryPrice(deliveryPrice);
      sp.setSalePrice(deliveryPrice); // <--- отначало продажната цена е същата като доставната !!!
      sp.setMeasuringUnit(measuringUnit);

      Transaction tr =
          DatastoreServiceFactory.getDatastoreService()
              .beginTransaction(TransactionOptions.Builder.withXG(true));
      sp.writeToDB();

      if (flagNew) {
        // добавяме нова част -> инициализираме записите за тази част във всички автосервизи
        SparePartAutoservice spa = new SparePartAutoservice();
        spa.setQuantityAvailable(0);
        spa.setQuantityBad(0);
        spa.setQuantityMinimum(0);
        spa.setQuantityOrdered(0);
        spa.setQuantityReserved(0);
        spa.setQuantityRequested(0);
        spa.setSparePartID(sp.getID());

        List<Autoservice> al = Autoservice.queryGetAll(0, 1000);
        for (Autoservice autoservice : al) {
          spa.setAutoserviceID(autoservice.getID());
          spa.writeToDB(true);
        }
      }

      tr.commit();

    } catch (RuntimeException e) {
      logger.log(Level.WARNING, "Can't write to DB!", e);
      return false;
    }

    return true;
  }
  private void addDebugAccounts() {

    // generate administrator employee
    if (Employee.countGetByName("Administrator") < 1) {
      Employee emp = new Employee();
      emp.setName("Administrator");
      emp.setFamily("n/a");
      emp.setAddressCity("n/a");
      emp.setAddressLine("n/a");
      emp.setMail("*****@*****.**");
      emp.setPhoneNumber("n/a");

      emp.writeToDB();
    }

    // generate administrator's autoservice; it's stupid I know :)
    if (Autoservice.countGetByName("Autoservice") < 1) {
      Autoservice autoservice = new Autoservice();
      autoservice.setName("Autoservice");
      autoservice.setAddressCity("n/a");
      autoservice.setAddressLine("n/a");
      autoservice.setMail("*****@*****.**");
      autoservice.setPhoneNumber("n/a");
      autoservice.setIBANNumber("n/a");
      autoservice.setSWIFTCode("n/a");
      autoservice.setRegistrationNumber("BG1209876");

      autoservice.writeToDB();
    }

    // generate admin account
    if (EmployeeAutoservice.countGetByUsername("admin") < 1) {
      EmployeeAutoservice empa = new EmployeeAutoservice();
      List<Autoservice> listAuto = Autoservice.queryGetByName("Autoservice", 0, 2);
      List<Employee> listEmp = Employee.queryGetByName("Administrator", 0, 2);
      if ((listAuto.size() != 1) || (listEmp.size() != 1)) {
        throw new RuntimeException("Oooopsssie :)");
      }

      empa.setAutoservice(listAuto.get(0));
      empa.setEmployee(listEmp.get(0));
      empa.setUsername("admin");
      empa.setPassword("1234");
      empa.setPosition(EmployeeAutoservice.ADMINISTRATOR);

      empa.writeToDB();
    }

    // generate manager account
    if (Employee.countGetByName("Manager") < 1) {
      Employee emp = new Employee();
      emp.setName("Manager");
      emp.setFamily("n/a");
      emp.setAddressCity("n/a");
      emp.setAddressLine("n/a");
      emp.setMail("*****@*****.**");
      emp.setPhoneNumber("n/a");

      emp.writeToDB();
    }

    if (EmployeeAutoservice.countGetByUsername("manager") < 1) {
      EmployeeAutoservice empa = new EmployeeAutoservice();
      List<Autoservice> listAuto = Autoservice.queryGetByName("Autoservice", 0, 2);
      List<Employee> listEmp = Employee.queryGetByName("Manager", 0, 2);
      if ((listAuto.size() != 1) || (listEmp.size() != 1)) {
        throw new RuntimeException("Oooopsssie :)");
      }

      empa.setAutoservice(listAuto.get(0));
      empa.setEmployee(listEmp.get(0));
      empa.setUsername("manager");
      empa.setPassword("1234");
      empa.setPosition(EmployeeAutoservice.MANAGER);

      empa.writeToDB();
    }

    // generate cashier account
    if (Employee.countGetByName("Cashier") < 1) {
      Employee emp = new Employee();
      emp.setName("Cashier");
      emp.setFamily("n/a");
      emp.setAddressCity("n/a");
      emp.setAddressLine("n/a");
      emp.setMail("*****@*****.**");
      emp.setPhoneNumber("n/a");

      emp.writeToDB();
    }

    if (EmployeeAutoservice.countGetByUsername("cashier") < 1) {
      EmployeeAutoservice empa = new EmployeeAutoservice();
      List<Autoservice> listAuto = Autoservice.queryGetByName("Autoservice", 0, 2);
      List<Employee> listEmp = Employee.queryGetByName("Cashier", 0, 2);
      if ((listAuto.size() != 1) || (listEmp.size() != 1)) {
        throw new RuntimeException("Oooopsssie :)");
      }

      empa.setAutoservice(listAuto.get(0));
      empa.setEmployee(listEmp.get(0));
      empa.setUsername("cashier");
      empa.setPassword("1234");
      empa.setPosition(EmployeeAutoservice.CASHIER);

      empa.writeToDB();
    }

    // generate warehouseman account
    if (Employee.countGetByName("Warehouseman") < 1) {
      Employee emp = new Employee();
      emp.setName("Warehouseman");
      emp.setFamily("n/a");
      emp.setAddressCity("n/a");
      emp.setAddressLine("n/a");
      emp.setMail("*****@*****.**");
      emp.setPhoneNumber("n/a");

      emp.writeToDB();
    }

    if (EmployeeAutoservice.countGetByUsername("warehouseman") < 1) {
      EmployeeAutoservice empa = new EmployeeAutoservice();
      List<Autoservice> listAuto = Autoservice.queryGetByName("Autoservice", 0, 2);
      List<Employee> listEmp = Employee.queryGetByName("Warehouseman", 0, 2);
      if ((listAuto.size() != 1) || (listEmp.size() != 1)) {
        throw new RuntimeException("Oooopsssie :)");
      }

      empa.setAutoservice(listAuto.get(0));
      empa.setEmployee(listEmp.get(0));
      empa.setUsername("warehouseman");
      empa.setPassword("1234");
      empa.setPosition(EmployeeAutoservice.WAREHOUSEMAN);

      empa.writeToDB();
    }

    // generate diagnostician account
    if (Employee.countGetByName("Diagnostician") < 1) {
      Employee emp = new Employee();
      emp.setName("Diagnostician");
      emp.setFamily("n/a");
      emp.setAddressCity("n/a");
      emp.setAddressLine("n/a");
      emp.setMail("*****@*****.**");
      emp.setPhoneNumber("n/a");

      emp.writeToDB();
    }

    if (EmployeeAutoservice.countGetByUsername("diagnostician") < 1) {
      EmployeeAutoservice empa = new EmployeeAutoservice();
      List<Autoservice> listAuto = Autoservice.queryGetByName("Autoservice", 0, 2);
      List<Employee> listEmp = Employee.queryGetByName("Diagnostician", 0, 2);
      if ((listAuto.size() != 1) || (listEmp.size() != 1)) {
        throw new RuntimeException("Oooopsssie :)");
      }

      empa.setAutoservice(listAuto.get(0));
      empa.setEmployee(listEmp.get(0));
      empa.setUsername("diagnostician");
      empa.setPassword("1234");
      empa.setPosition(EmployeeAutoservice.DIAGNOSTICIAN);

      empa.writeToDB();
    }

    // generate auto mechanic account
    if (Employee.countGetByName("Auto_Mechanic") < 1) {
      Employee emp = new Employee();
      emp.setName("Auto_Mechanic");
      emp.setFamily("n/a");
      emp.setAddressCity("n/a");
      emp.setAddressLine("n/a");
      emp.setMail("*****@*****.**");
      emp.setPhoneNumber("n/a");

      emp.writeToDB();
    }

    if (EmployeeAutoservice.countGetByUsername("auto_mechanic") < 1) {
      EmployeeAutoservice empa = new EmployeeAutoservice();
      List<Autoservice> listAuto = Autoservice.queryGetByName("Autoservice", 0, 2);
      List<Employee> listEmp = Employee.queryGetByName("Auto_Mechanic", 0, 2);
      if ((listAuto.size() != 1) || (listEmp.size() != 1)) {
        throw new RuntimeException("Oooopsssie :)");
      }

      empa.setAutoservice(listAuto.get(0));
      empa.setEmployee(listEmp.get(0));
      empa.setUsername("auto_mechanic");
      empa.setPassword("1234");
      empa.setPosition(EmployeeAutoservice.AUTO_MECHANIC);

      empa.writeToDB();
    }
  }