Na opslaan dubbele records aangemaakt

Status
Niet open voor verdere reacties.

Fosters

Gebruiker
Lid geworden
26 jul 2010
Berichten
60
Beste forumgebruikers,

Ik zit met een eenvoudig probleem wat een beetje omslachtig is om uit te leggen. In een webbased systeem biedt ik medewerkers de mogelijkheid om hun uren bij te houden die ze besteden aan bepaalde projecten.

Op een pagina plannen ze voor een hele week hun uren in, waarna ze dagelijks hun werkelijke uren bij moeten houden. Bij het uitdraaien van een rapportage kan ik vervolgens de verschillen zien tussen geplande en werkelijke uren.

Stel ik plan van ma. t/m vr. uren in, dan worden er 5 records aangemaakt. Als ik nu voor een dag de werkelijke uren invul, dan worden deze toegevoegd aan het bestaande record, maar er wordt ook nog een nieuw record met geplande uren aangemaakt.

In de bijlage de bijbehorende php en html files. Via deze link een wordbestandje met wat screenshots

Alvast hartelijk dank voor jullie hulp!

Bekijk bijlage 117899
 
Heb even snel gekeken, maar kan het zo niet vinden. Kun jij eens EditView.php plaatsen? Gezien de form van het aanpassen van die werkuren, naar die pagina wordt geposted.
 
Vreemd, maar ik zie in de map van deze module enkel EditDailyMatrix.php and EditMatrix.php. In de mappen van overige modulen is dit bestand wel te vinden.

Het enige bestand wat ik nog gevonden heb is editviewdefs.php
 
Laatst bewerkt:
Bijgevoegd een screenshotje van de database. Ik heb 3 dagen gepland van 5 uur, en op 12-01 werkelijk 8 uur gewerkt.

Je ziet dat deze 8 uur zijn toegevoegd aan de bestaande records, maar dat er evengoed een nieuwe records is aangemaakt met 5 nieuwe geplande uren.

database.jpg
 
Hmm, ik kan zo even niet het verband vinden. Is dit een gedownload pakket? Of heeft iemand dit voor jullie gemaakt/zelf gescript? Want om deze fout te achterhalen, zul je denk ik wel even flink moeten debuggen.

Kun jij het stukje code achterhalen waarin deze wijzigingen naar de database worden gestuurd?
 
Het is een extra module voor het open source crm-pakket SugarCRM, gemaakt door een Tsjech. Deze module is zelf verder aangepast naar onze wensen. Dit is ook gelukt, op dit ene euvel nog na.

Ik heb de overige bestanden van deze module toegevoegd in de bijlage. Helaas is mijn eigen kennis ver te zoeken en mijn php hulp ontslagen. :evil:


-----
Ik ben er inmiddels ook achter dat het bestaande record met geplande uren niet wordt aangevuld met werkelijke uren. Er wordt een nieuw record aangemaakt met zowel de geplande als de werkelijke uren.
Ik moet dus het bestaande record bij opslaan verwijderen, of zorgen dat de nieuwe gegevens aan het bestaande record worden toegevoegd. Tips :)
 
Laatst bewerkt:
Ik denk dat ik gebruik moet maken van de UPDATE statement in onderstaande code. Nu wordt er een nieuw record aangemaakt, maar hij moet het bestaande record updaten.

PHP:
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
require_once('modules/Timesheet/Timesheet.php');
require_once('include/formbase.php');

global $current_user;

$focus = new Timesheet();

if(!$focus->ACLAccess('Save')){
  ACLController::displayNoAccess(true);
  sugar_cleanup(true);
}

$data = array();
$data = $_POST['data'];
$billable = $_POST['billable']; // --> de geplande uren oproepen
$description = $_POST['description'];

$records = array();
$records = $_POST['records'];

$temp = new Timesheet();

$php5 = version_compare(phpversion(), '5.0');

foreach ($data as $parentData => $actual) {
	$bilVal = 0;
	if (isset($actual) && $actual != '') {
    if ($php5 < 0) {
      $focus = $temp;
    }
    else {
      $focus = @clone($temp);
    }
   $idxDesc = $parentData;
    $parentData = explode(".", $parentData);
    $recid = $parentData[0].".".$parentData[2];
    if (isset($records[$recid])) {
	  $focus->retrieve($records[$recid]);
    }
    $focus->actual = $actual;
    $focus->date_booked = $parentData[2];
    $focus->parent_id = $parentData[0];
    $focus->parent_type = $parentData[1];
    $focus->assigned_user_id = $current_user->id;
	if (isset($billable[$idxDesc])) { // --> indien geplande uren aanwezig, deze verwerken
      $focus->billable = trim($billable[$idxDesc]);
	  $bilVal = trim($billable[$idxDesc]);
	}  
    if (isset($description[$idxDesc])) {
      $focus->description = trim($description[$idxDesc]);
    }
	if(($actual + $bilVal) > 0)
	{
		$focus->save($GLOBALS['check_notify']);
	}
  } 
}


if (!empty($_REQUEST['ajax'])) {
  echo "success";
  exit;
}
handleRedirect();
?>
 
Code:
$records = array();
$records = $_POST['records'];

echo "<pre>";
var_dump($records);
die;

This did the trick!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan