예제 #1
0
 /**
  * @brief Create a new device-part
  *
  * @param Database  &$database          reference to the database object
  * @param User      &$current_user      reference to the current user which is logged in
  * @param Log       &$log               reference to the Log-object
  * @param integer   $device_id          the ID of the device
  * @param integer   $part_id            the ID of the part
  * @param integer   $quantity           the mount quantity (see DevicePart::set_mount_quantity())
  * @param string    $mountnames         the mountname(s) (see DevicePart::set_mount_name())
  * @param boolean   $increase_if_exist  @li if true, and there is already a DevicePart with the same
  *                                          part ID + device ID, the mount quantity of the existing
  *                                          DevicePart will be incremented by $quantity. In addition,
  *                                          the new mount name ($mountname) will be attached (with a
  *                                          comma) at the end of the mount name of the existing DevicePart.
  *                                      @li if false, and there is already a DevicePart with the same
  *                                          part ID + device ID, this method will throw an exception.
  *
  * @retval DevicePart   the new device-part
  * @retval DevicePart   the existing device-part, if there is already a DevicePart with
  *                      the same part ID + device ID and "$increment_if_exist == true"
  *
  * @throws Exception    if (this combination of) values is not valid
  * @throws Exception    if there was an error
  *
  * @see DBElement::add()
  */
 public static function add(&$database, &$current_user, &$log, $device_id, $part_id, $quantity, $mountnames = '', $increase_if_exist = false)
 {
     $existing_devicepart = DevicePart::get_device_part($database, $current_user, $log, $device_id, $part_id);
     if (is_object($existing_devicepart)) {
         if ($increase_if_exist) {
             if (!is_int($quantity) && !ctype_digit($quantity) || $quantity < 0) {
                 debug('error', 'quantity = "' . $quantity . '"', __FILE__, __LINE__, __METHOD__);
                 throw new Exception('Die Bestückungs-Anzahl ist ungültig!');
             }
             $quantity = $existing_devicepart->get_mount_quantity() + $quantity;
             $old_mountnames = $existing_devicepart->get_mount_names();
             if (strlen($mountnames) > 0) {
                 if (strlen($old_mountnames) > 0) {
                     $mountnames = $old_mountnames . ', ' . $mountnames;
                 }
             } else {
                 $mountnames = $old_mountnames;
             }
             $existing_devicepart->set_attributes(array('quantity' => $quantity, 'mountnames' => $mountnames));
             return $existing_devicepart;
         } else {
             $device = new Device($database, $current_user, $log, $device_id);
             $part = new Part($database, $current_user, $log, $part_id);
             throw new Exception('Die Baugruppe "' . $device->get_name() . '" enthält bereits das Bauteil "' . $part->get_name() . '"!');
         }
     }
     // there is no such DevicePart, so we will create it
     return parent::add($database, $current_user, $log, 'device_parts', array('id_device' => $device_id, 'id_part' => $part_id, 'quantity' => $quantity, 'mountnames' => $mountnames));
 }
 /**
  * @brief Compare function for "usort()"
  *
  * From php.net:    The comparison function must return an integer less than,
  *                  equal to, or greater than zero if the first argument is considered
  *                  to be respectively less than, equal to, or greater than the second.
  *
  * @param Part $part_1      The Part Object #1
  * @param Part $part_2      The Part Object #2
  *
  * @retval integer
  */
 static function usort_compare($part_1, $part_2)
 {
     if ($part_1->get_name() != $part_2->get_name()) {
         return strcasecmp($part_1->get_name(), $part_2->get_name());
     } else {
         // names are identical, so we compare the description of the parts
         return strcasecmp($part_1->get_description(), $part_2->get_description());
     }
 }
예제 #3
0
}
/********************************************************************************
 *
 *   Set the rest of the HTML variables
 *
 *********************************************************************************/
$html->use_javascript(array('validatenumber', 'popup'));
// global settings
$html->set_variable('use_modal_popup', $config['popup']['modal'], 'boolean');
$html->set_variable('popup_width', $config['popup']['width'], 'integer');
$html->set_variable('popup_height', $config['popup']['height'], 'integer');
if (!$fatal_error) {
    try {
        // part attributes
        $html->set_variable('pid', $part->get_id(), 'integer');
        $html->set_variable('name', $part->get_name(), 'string');
        $html->set_variable('manufacturer_product_url', $part->get_manufacturer_product_url(), 'string');
        $html->set_variable('description', $part->get_description(), 'string');
        $html->set_variable('category_full_path', $part->get_category()->get_full_path(), 'string');
        $html->set_variable('instock', $part->get_instock(), 'integer');
        $html->set_variable('mininstock', $part->get_mininstock(), 'integer');
        $html->set_variable('visible', $part->get_visible(), 'boolean');
        $html->set_variable('comment', nl2br($part->get_comment()), 'string');
        $html->set_variable('footprint_full_path', is_object($footprint) ? $footprint->get_full_path() : '-', 'string');
        $html->set_variable('footprint_filename', is_object($footprint) ? str_replace(BASE, BASE_RELATIVE, $footprint->get_filename()) : '', 'string');
        $html->set_variable('storelocation_full_path', is_object($storelocation) ? $storelocation->get_full_path() : '-', 'string');
        $html->set_variable('storelocation_is_full', is_object($storelocation) ? $storelocation->get_is_full() : false, 'boolean');
        $html->set_variable('manufacturer_full_path', is_object($manufacturer) ? $manufacturer->get_full_path() : '-', 'string');
        $html->set_variable('category_full_path', is_object($category) ? $category->get_full_path() : '-', 'string');
        $html->set_variable('auto_order_exists', $part->get_instock() < $part->get_mininstock(), 'boolean');
        $html->set_variable('manual_order_exists', $part->get_manual_order() && $part->get_instock() >= $part->get_mininstock(), 'boolean');